您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘PPHP中怎么實現(xiàn)在線端口掃描功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
PHP4/5/7版本中提供了fsockopen方法,該方法用于打開一個網(wǎng)絡連接或者一個Unix套接字連接,也可以用來進行開放端口掃描。
使用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.'&nbsp&nbsp'; echo $msg[$key].'&nbsp&nbsp'; $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.'&nbsp&nbsp'; echo $msg[$key].'&nbsp&nbsp'; $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)在線端口掃描功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。