端口扫描php,PHP实现在线端口扫描

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

下面是PHP官方对于fsockopen方法的说明:

d705878a19fa9a5661aa207dd530f0df.png

使用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.'&ampnbsp&ampnbsp';

echo $msg[$key].'&ampnbsp&ampnbsp';

$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.'&ampnbsp&ampnbsp';

echo $msg[$key].'&ampnbsp&ampnbsp';

$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进行了美化处理):

f8133b00c7709a3add96abf52fba1cf2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值