溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中怎么實現(xiàn)在線端口掃描功能

發(fā)布時間:2021-06-29 17:20:11 來源:億速云 閱讀:437 作者:Leah 欄目:網(wǎng)絡管理

這期內(nèi)容當中小編將會給大家?guī)碛嘘PPHP中怎么實現(xiàn)在線端口掃描功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

PHP4/5/7版本中提供了fsockopen方法,該方法用于打開一個網(wǎng)絡連接或者一個Unix套接字連接,也可以用來進行開放端口掃描。

PHP中怎么實現(xiàn)在線端口掃描功能

使用fsockopen()方法我們可以設計以下思路來實現(xiàn)開放端口檢測:

  • 1.獲取目標IP地址以及待掃描的端口列表。

  • 2.使用For循環(huán)遍歷帶掃描的端口數(shù)組,講目標IP地址與端口進行拼接。

  • 3.使用fsockopen()函數(shù)進行探測:通過Timeout參數(shù)進行判斷:若超過1s無響應則視作端口未開放。

  • 4.考慮到端口掃描功能的特殊性,可能會存在SSRF漏洞,因此需要對SSRF漏洞進行防護。

開放端口掃描實現(xiàn)出的代碼如下:

function getOpenPort($ip,$port){
    $msg = array('Ftp','Telnet','Smtp','Finger','Http','Pop3','Location Service','Netbios-NS','Netbios-DGM','Netbios-SSN','IMAP','Https','Microsoft-DS','MSSQL','MYSQL');
    foreach ($port as $key => $value){
        echo $value.'&ampnbsp&ampnbsp';
        echo $msg[$key].'&ampnbsp&ampnbsp';
        $fp = @fsockopen($ip,$value,$errno,$errstr,0.5);
        $result = $fp ? '<font color="#43CD80"><開啟></font><br>' : '<font color="#FF6347"><關閉></font><br>';
        echo $result;

針對于SSRF漏洞防護我們給出的方案是:創(chuàng)建IP黑名單,屏蔽內(nèi)網(wǎng)IP,防止掃描內(nèi)網(wǎng)IP地址

針對以上方案,我們寫出的防護代碼如下:

$blackHostlist = array("172.", "10.", "localhost", "127.", "192.");
foreach($blackHostlist as $blackHost){
    if(strpos($ip, $blackHost) === 0){
        echo '<script>alert("禁止掃描內(nèi)網(wǎng)地址!");</script>';
        die();
    }
}

同時設計一個前端的表單來接受用戶傳送的參數(shù):

# index.html
<form method="post" action="scan.php">
目標IP - IP Address:<input type="text" name="ip" id="domain"><br><br>
掃描端口 - Ports:<input type="test" name="port" value="21,23,25,79,80,110,135,137,138,139,143,443,445,1433,3306"><br><br>
開始掃描 - Start:<input type="submit" value="點擊開始掃描 - Scaning">
</form>

最終的PHP后端代碼如下:

<?php
    function getOpenPort($ip,$port){
        $msg = array('Ftp','Telnet','Smtp','Finger','Http','Pop3','Location Service','Netbios-NS','Netbios-DGM','Netbios-SSN','IMAP','Https','Microsoft-DS','MSSQL','MYSQL');
        foreach ($port as $key => $value){
            echo $value.'&ampnbsp&ampnbsp';
            echo $msg[$key].'&ampnbsp&ampnbsp';
            $fp = @fsockopen($ip,$value,$errno,$errstr,0.5);
           $result = $fp ? '<font color="#43CD80"><開啟></font><br>' : '<font color="#FF6347"><關閉></font><br>';
            echo $result;

    $url = $_POST['ip'];
    $port = $_POST['port'];
    $blackHostlist = array("172.", "10.", "localhost", "127.", "192.");
    foreach($blackHostlist as $blackHost){
        if(strpos($ip, $blackHost) === 0){
            echo '<script>alert("禁止掃描內(nèi)網(wǎng)地址!");</script>';
            die();
        }
    }
    getOpenPort($ip,$port);

最終運行效果如下(前端UI進行了美化處理):

PHP中怎么實現(xiàn)在線端口掃描功能

上述就是小編為大家分享的PHP中怎么實現(xiàn)在線端口掃描功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI