端口扫描php,PHP实现在线端口扫描
PHP4/5/7版本中提供了fsockopen方法,該方法用于打開一個(gè)網(wǎng)絡(luò)連接或者一個(gè)Unix套接字連接,也可以用來進(jìn)行開放端口掃描。
下面是PHP官方對于fsockopen方法的說明:
使用fsockopen()方法我們可以設(shè)計(jì)以下思路來實(shí)現(xiàn)開放端口檢測:1.獲取目標(biāo)IP地址以及待掃描的端口列表。
2.使用For循環(huán)遍歷帶掃描的端口數(shù)組,講目標(biāo)IP地址與端口進(jìn)行拼接。
3.使用fsockopen()函數(shù)進(jìn)行探測:通過Timeout參數(shù)進(jìn)行判斷:若超過1s無響應(yīng)則視作端口未開放。
4.考慮到端口掃描功能的特殊性,可能會(huì)存在SSRF漏洞,因此需要對SSRF漏洞進(jìn)行防護(hù)。
開放端口掃描實(shí)現(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 ? '
' : '
';
echo $result;
針對于SSRF漏洞防護(hù)我們給出的方案是:創(chuàng)建IP黑名單,屏蔽內(nèi)網(wǎng)IP,防止掃描內(nèi)網(wǎng)IP地址
針對以上方案,我們寫出的防護(hù)代碼如下:$blackHostlist = array("172.", "10.", "localhost", "127.", "192.");
foreach($blackHostlist as $blackHost){
if(strpos($ip, $blackHost) === 0){
echo '';
die();
}
}
同時(shí)設(shè)計(jì)一個(gè)前端的表單來接受用戶傳送的參數(shù):# index.html
目標(biāo)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);
最終運(yùn)行效果如下(前端UI進(jìn)行了美化處理):
總結(jié)
以上是生活随笔為你收集整理的端口扫描php,PHP实现在线端口扫描的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建TFTP服务器
- 下一篇: php旅游管理系统,基于Laravel框