端口扫描php,PHP实现在线端口扫描
PHP4/5/7版本中提供了fsockopen方法,該方法用于打開一個網絡連接或者一個Unix套接字連接,也可以用來進行開放端口掃描。
下面是PHP官方對于fsockopen方法的說明:
使用fsockopen()方法我們可以設計以下思路來實現開放端口檢測:1.獲取目標IP地址以及待掃描的端口列表。
2.使用For循環遍歷帶掃描的端口數組,講目標IP地址與端口進行拼接。
3.使用fsockopen()函數進行探測:通過Timeout參數進行判斷:若超過1s無響應則視作端口未開放。
4.考慮到端口掃描功能的特殊性,可能會存在SSRF漏洞,因此需要對SSRF漏洞進行防護。
開放端口掃描實現出的代碼如下: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 ? '
' : '
';
echo $result;
針對于SSRF漏洞防護我們給出的方案是:創建IP黑名單,屏蔽內網IP,防止掃描內網IP地址
針對以上方案,我們寫出的防護代碼如下:$blackHostlist = array("172.", "10.", "localhost", "127.", "192.");
foreach($blackHostlist as $blackHost){
if(strpos($ip, $blackHost) === 0){
echo '';
die();
}
}
同時設計一個前端的表單來接受用戶傳送的參數:# index.html
目標IP - IP Address:
掃描端口 - Ports:
開始掃描 - Start:
最終的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 ? '
' : '
';
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,PHP实现在线端口扫描的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建TFTP服务器
- 下一篇: win7自带tftp服务器,如何打开tf