千家信息网

PHP中怎么实现在线端口扫描功能

发表于:2024-10-29 作者:千家信息网编辑
千家信息网最后更新 2024年10月29日,这期内容当中小编将会给大家带来有关PHP中怎么实现在线端口扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP4/5/7版本中提供了fsockopen方法,
千家信息网最后更新 2024年10月29日PHP中怎么实现在线端口扫描功能

这期内容当中小编将会给大家带来有关PHP中怎么实现在线端口扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

PHP4/5/7版本中提供了fsockopen方法,该方法用于打开一个网络连接或者一个Unix套接字连接,也可以用来进行开放端口扫描。


使用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后端代码如下:

 $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中怎么实现在线端口扫描功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

0