- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- PHP中怎么實(shí)現在線(xiàn)端口掃描功能
這期內容當中小編將會(huì )給大家帶來(lái)有關(guān)PHP中怎么實(shí)現在線(xiàn)端口掃描功能,文章內容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
PHP4/5/7版本中提供了fsockopen方法,該方法用于打開(kāi)一個(gè)網(wǎng)絡(luò )連接或者一個(gè)Unix套接字連接,也可以用來(lái)進(jìn)行開(kāi)放端口掃描。
使用fsockopen()方法我們可以設計以下思路來(lái)實(shí)現開(kāi)放端口檢測:
1.獲取目標IP地址以及待掃描的端口列表。
2.使用For循環(huán)遍歷帶掃描的端口數組,講目標IP地址與端口進(jìn)行拼接。
3.使用fsockopen()函數進(jìn)行探測:通過(guò)Timeout參數進(jìn)行判斷:若超過(guò)1s無(wú)響應則視作端口未開(kāi)放。
4.考慮到端口掃描功能的特殊性,可能會(huì )存在SSRF漏洞,因此需要對SSRF漏洞進(jìn)行防護。
開(kāi)放端口掃描實(shí)現出的代碼如下:
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',''); 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"><開(kāi)啟></font><br>' : '<font color="#FF6347"><關(guān)閉></font><br>'; echo $result;
針對于SSRF漏洞防護我們給出的方案是:創(chuàng )建IP黑名單,屏蔽內網(wǎng)IP,防止掃描內網(wǎng)IP地址
針對以上方案,我們寫(xiě)出的防護代碼如下:
$blackHostlist = array("172.", "10.", "localhost", "127.", "192."); foreach($blackHostlist as $blackHost){ if(strpos($ip, $blackHost) === 0){ echo '<script>alert("禁止掃描內網(wǎng)地址!");</script>'; die(); } }
同時(shí)設計一個(gè)前端的表單來(lái)接受用戶(hù)傳送的參數:
# 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> 開(kāi)始掃描 - Start:<input type="submit" value="點(diǎn)擊開(kāi)始掃描 - 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"><開(kāi)啟></font><br>' : '<font color="#FF6347"><關(guān)閉></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("禁止掃描內網(wǎng)地址!");</script>'; die(); } } getOpenPort($ip,$port);
最終運行效果如下(前端UI進(jìn)行了美化處理):
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站