搜索
首页后端开发php教程fsockopen() 函数的开放端口扫描器
fsockopen() 函数的开放端口扫描器Aug 20, 2017 am 09:12 AM
fsockopen扫描器端口

利用 fsockopen() 函数开放端口扫描器


1、前言

本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器。

2、关键技术

本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该端口处于关闭状态。

核心代码如下:


foreach ($port as $key => $value) {
    echo &#39;<tr>&#39;;
    echo &#39;<td>&#39; . $key . &#39;</td>&#39;;
    echo &#39;<td>&#39; . $value . &#39;</td>&#39;;
    echo &#39;<td>&#39; . $msg[$key] . &#39;</td>&#39;;    //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时
    $fp = @fsockopen($ip, $value, $errno, $errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@
    $result = $fp ? &#39;<span style="color:red">开启</span>&#39; : &#39;<span style="color:red">关闭</span>&#39;;
    echo &#39;<td>&#39; . $result . &#39;</td>&#39;;
    echo &#39;</tr>&#39;;
}

 

3、代码如下

 


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>端口扫描</title>
    <style type="text/css">
        td{
            padding:10px;
            border-bottom:1px solid #eee;
        }
    </style>
</head>
<body>
    <form method="post" action=&#39;#&#39;>
        网址/ip:<input type="text" name="ip" value="<?php echo  $_POST[&#39;ip&#39;] ?? &#39;127.0.0.1&#39;?>">
        <button>扫描</button>
    </form>
    <table>
        <thead>
            <tr>
                <td>id</td>
                <td>端口号</td>
                <td>服务</td>
                <td>开启状态</td>
            </tr>
        </thead>
        <tbody>
            <?php  
                $ip = $_POST[&#39;ip&#39;] ?? &#39;127.0.0.1&#39;;
                if(ip2long($ip)){
                    $aIp = explode(&#39;.&#39;, $ip);//ip4地址使用.分隔符
                    //这里没有对 0.0.0.0 这种本机地址进行判断,只是粗略的判断ip是否合法 
                    foreach ($aIp as $key => $value) {
                        if($value < 0 || $value > 255){
                            die(&#39;地址不合法&#39;);
                        }
                    }
                }
                
                $port = array(
                    21, 
                    23, 
                    25,
                    79,
                    80, 
                    110, 
                    135, 
                    137, 
                    138, 
                    139, 
                    143, 
                    443, 
                    445, 
                    1433, 
                    3306, 

                );
                $msg = array(
                    &#39;Ftp&#39;,
                    &#39;Telnet&#39;,
                    &#39;Smtp&#39;,
                    &#39;Finger&#39;,
                    &#39;Http&#39;,
                    &#39;Pop3&#39;,
                    &#39;Location Service&#39;,
                    &#39;Netbios-NS&#39;,
                    &#39;Netbios-DGM&#39;,
                    &#39;Netbios-SSN&#39;,
                    &#39;IMAP&#39;,
                    &#39;Https&#39;,
                    &#39;Microsoft-DS&#39;,
                    &#39;MSSQL&#39;,
                    &#39;MYSQL&#39;,
                    &#39;Terminal Services&#39;
                );
                //无论使用prot还是msg循环都是可以的,因为$key是对应的,都是索引数组
                foreach ($port as $key => $value) {
                    echo &#39;<tr>&#39;;
                    echo &#39;<td>&#39; . $key . &#39;</td>&#39;;
                    echo &#39;<td>&#39; . $value . &#39;</td>&#39;;
                    echo &#39;<td>&#39; . $msg[$key] . &#39;</td>&#39;;
                    //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时
                    $fp = @fsockopen($ip, $value, $errno, $errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@
                    $result = $fp ? &#39;<span style="color:red">开启</span>&#39; : &#39;<span style="color:red">关闭</span>&#39;;
                    echo &#39;<td>&#39; . $result . &#39;</td>&#39;;
                    echo &#39;</tr>&#39;;
                }

            ?>
        </tbody>
    </table>
</body>
</html>
因为偷懒,把页面和结果都写在一起了,布局就将就把。

 

4、主要函数介绍

4.1、fsockopen

根据一个主机名来创建一个连接,成功返回一个资源对象,失败返回false;主机不可用是抛出一个警告

以上是fsockopen() 函数的开放端口扫描器的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在Windows PC上检测到Soundbar作为显示器屏幕[修复]在Windows PC上检测到Soundbar作为显示器屏幕[修复]Feb 19, 2024 pm 11:42 PM

在WindowsPC上,有用户发现将Soundbar连接到HDMI端口时会被识别为显示器的问题。这可能会导致一些困扰,但解决方案并非唯一。Soundbar如何通过HDMI连接到PC大多数音棒使用HDMI、光学或3.5mm音频连接。如果您的音棒只支持HDMI连接,那么必须将其连接到带有HDMIARC标签的HDMI端口。许多电视或显示器通常配备多个HDMI端口,其中一个端口应该支持符合HDMI标准的ARC协议。换句话说,HDMI是用于传输音频和视频的接口,如果设备没有HDMI端口,可以考虑使用显示器

linux 怎么查看远程服务器端口是否开放linux 怎么查看远程服务器端口是否开放Mar 21, 2023 am 09:50 AM

linux查看远程服务器端口是否开放的方法:1、通过“nmap ip -p port”命令检测端口是否打开,具体命令如“nmap 172.17.193.18 -p 5902”;2、通过“nc -v ip port”命令检测端口是否打开,具体命令如“如nc -v 172.17.193.18 5902”。

com1和com2是什么端口com1和com2是什么端口Aug 25, 2022 am 10:53 AM

com1和com2是串行通讯端口,简称串口;一块主板一般带有两个com串行接口,通常用于连接鼠标即通讯设备,串行接口是指数据一位一位的顺序传送,特点是通信线路简单,只要一对传输线就可以实现双向通信。

Win11怎样关闭445端口Win11怎样关闭445端口Jul 04, 2023 pm 12:17 PM

  Win11怎样关闭445端口?445号端口是一个TCP端口,是一个共享文件夹和打印机端口,在局域网内提供文件或打印机共享服务。近期有部分Win11用户想要关闭445端口,那么应该如何操作呢?很多小伙伴不知道怎么详细操作,小编下面整理了Win11关闭445端口的详细操作,如果你感兴趣的话,跟着小编一起往下看看吧!  Win11关闭445端口的详细操作  1、首先,按Win+S组合键,或点击底部任务栏上的搜索图标,打开的Windows搜索窗口,顶部输入Windows防火墙,然后点击系统给出的最佳

修复Windows计算机上的AHCI端口0设备错误修复Windows计算机上的AHCI端口0设备错误Feb 19, 2024 pm 12:45 PM

如果你每次启动电脑时遇到AHCI端口0设备错误,需要按照本文提供的方法解决该问题。什么是AHCI端口0设备错误?AHCI设备错误是由BIOS报告的。SMART已指示端口0上的硬盘驱动器存在故障,可能无法访问。硬盘有可能随时出现问题。如果是台式机,建议尝试更换硬盘连接端口。若问题仍然存在,则可能是硬盘本身的问题。您可以运行磁盘检查工具,禁用故障硬盘并检查端口以解决此问题。修复Windows计算机上的AHCI端口0设备错误通常情况下,AHCIPort0设备错误并非源自操作系统问题,而是硬盘在端口0出

iOS 17 更新后,您的 iPhone 无法充电?这是你可以做的iOS 17 更新后,您的 iPhone 无法充电?这是你可以做的Sep 21, 2023 pm 11:41 PM

iOS17充电问题的原因是什么?更新到iOS17后,您的iPhone可能无法充电有几个可能的原因。一种可能性是软件更新中存在错误。Apple通常会快速修复iOS更新中的错误,因此,如果您遇到充电问题,则值得检查是否有新的更新。另一种可能性是充电电缆或适配器有问题。如果您使用的是第三方充电连接线或适配器,请确保它已通过Apple认证。如何修复iPhone不充电问题以下是有关如何修复iOS17更新后iPhone无法充电问题的一些提示:重启你的苹果手机这通常可以解决可能是iOS17充电问题根本原因的小

如何关闭端口如何关闭端口Jan 17, 2024 pm 02:07 PM

关闭端口的方法:1、使用防火墙关闭端口;2、使用系统配置关闭端口;3、使用第三方软件关闭端口;4、修改注册表关闭端口;5、使用路由器关闭端口;6、手动停止服务关闭端口;7、使用命令行关闭端口;8、使用安全软件关闭端口;9、修改应用程序配置关闭端口;10、使用网络设备关闭端口。详细介绍:1、使用防火墙关闭端口,打开“控制面板”,选择“Windows Defender防火墙”等等。

docker映射端口出错怎么办docker映射端口出错怎么办Oct 21, 2022 pm 03:29 PM

docker映射端口出错的解决办法:1、切换到root账户;2、通过“netstat -nap”命令查看程序运行的pid;3、通过“kill -9 2901 su u260517”命令杀死程序并切换程序即可。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版