這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)PHP中怎么實現(xiàn)在線端口掃描功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、海安ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的海安網(wǎng)站制作公司
PHP4/5/7版本中提供了fsockopen方法,該方法用于打開一個網(wǎng)絡(luò)連接或者一個Unix套接字連接,也可以用來進行開放端口掃描。
使用fsockopen()方法我們可以設(shè)計以下思路來實現(xiàn)開放端口檢測:
1.獲取目標IP地址以及待掃描的端口列表。
2.使用For循環(huán)遍歷帶掃描的端口數(shù)組,講目標IP地址與端口進行拼接。
3.使用fsockopen()函數(shù)進行探測:通過Timeout參數(shù)進行判斷:若超過1s無響應(yīng)則視作端口未開放。
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 ? '<開啟>
' : '<關(guān)閉>
'; 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 ''; die(); } }
同時設(shè)計一個前端的表單來接受用戶傳送的參數(shù):
# index.html
最終的PHP后端代碼如下:
$value){ echo $value.'&nbsp&nbsp'; echo $msg[$key].'&nbsp&nbsp'; $fp = @fsockopen($ip,$value,$errno,$errstr,0.5); $result = $fp ? '<開啟>
' : '<關(guān)閉>
'; 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 ''; die(); } } getOpenPort($ip,$port);
最終運行效果如下(前端UI進行了美化處理):
上述就是小編為大家分享的PHP中怎么實現(xiàn)在線端口掃描功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。