这期内容当中小编将会给大家带来有关PHP中怎么实现在线端口扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
这期内容当中小编将会给大家带来有关PHP中怎么实现在线端口扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
成都服务器托管,创新互联提供包括服务器租用、雅安电信机房、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、主机域名等业务的一体化完整服务。电话咨询:028-86922220
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',''); 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"><开启></font><br>' : '<font color="#FF6347"><关闭></font><br>'; echo $result;
针对于SSRF漏洞防护我们给出的方案是:创建IP黑名单,屏蔽内网IP,防止扫描内网IP地址
针对以上方案,我们写出的防护代码如下:$blackHostlist = array("172.", "10.", "localhost", "127.", "192.");foreach($blackHostlist as $blackHost){ if(strpos($ip, $blackHost) === 0){ echo '<script>alert("禁止扫描内网地址!");</script>'; die(); }}
# 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>开始扫描 - Start:<input type="submit" value="点击开始扫描 - Scaning"></form>
<?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"><开启></font><br>' : '<font color="#FF6347"><关闭></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("禁止扫描内网地址!");</script>'; die(); } } getOpenPort($ip,$port);
最终运行效果如下(前端UI进行了美化处理):
文章标题:PHP中怎么实现在线端口扫描功能
转载注明:https://www.cdcxhl.com/article24/iopcje.html
成都网站建设公司_创新互联,为您提供云服务器、商城网站、网站设计公司、网站导航、标签优化、手机网站建设
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联