PHP Socket编程 之 利用 fsockopen() 函数开放端口扫描器的实例
2023-09-14 08:57:36 时间
1、前言
本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器。
2、关键技术
本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该端口处于关闭状态。
核心代码如下:
foreach ($port as $key => $value) { echo '<tr>'; echo '<td>' . $key . '</td>'; echo '<td>' . $value . '</td>'; echo '<td>' . $msg[$key] . '</td>'; //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时 $fp = @fsockopen($ip, $value, $errno, $errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@ $result = $fp ? '<span >开启</span>' : '<span >关闭</span>'; echo '<td>' . $result . '</td>'; echo '</tr>'; }
3、代码如下
<!DOCTYPE html> <html lang="en"> <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='#'> 网址/ip:<input type="text" name="ip" value="<?php echo $_POST['ip'] ?? '127.0.0.1'?>"> <button>扫描</button> </form> <table> <thead> <tr> <td>id</td> <td>端口号</td> <td>服务</td> <td>开启状态</td> </tr> </thead> <tbody> <?php $ip = $_POST['ip'] ?? '127.0.0.1'; if(ip2long($ip)){ $aIp = explode('.', $ip);//ip4地址使用.分隔符 //这里没有对 0.0.0.0 这种本机地址进行判断,只是粗略的判断ip是否合法 foreach ($aIp as $key => $value) { if($value < 0 || $value > 255){ die('地址不合法'); } } } $port = array( 21, 23, 25, 79, 80, 110, 135, 137, 138, 139, 143, 443, 445, 1433, 3306, 3389, ); $msg = array( 'Ftp', 'Telnet', 'Smtp', 'Finger', 'Http', 'Pop3', 'Location Service', 'Netbios-NS', 'Netbios-DGM', 'Netbios-SSN', 'IMAP', 'Https', 'Microsoft-DS', 'MSSQL', 'MYSQL', 'Terminal Services' ); //无论使用prot还是msg循环都是可以的,因为$key是对应的,都是索引数组 foreach ($port as $key => $value) { echo '<tr>'; echo '<td>' . $key . '</td>'; echo '<td>' . $value . '</td>'; echo '<td>' . $msg[$key] . '</td>'; //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时 $fp = @fsockopen($ip, $value, $errno, $errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@ $result = $fp ? '<span >开启</span>' : '<span >关闭</span>'; echo '<td>' . $result . '</td>'; echo '</tr>'; } ?> </tbody> </table> </body> </html>
4、主要函数介绍
4.1、fsockopen
根据一个主机名来创建一个连接,成功返回一个资源对象,失败返回false;主机不可用是抛出一个警告
详情参考:http://php.net/manual/en/function.fsockopen.php
相关文章
- Linux运维常用shell脚本实例
- 数据PHP编程:从MySQL数据库中取出数据(php取mysql)
- 测试MySQL触发器构建:PHP测试实例(mysql触发器php)
- MySQL在PHP中的配置须知(php中的mysql配置)
- 解决Oracle多实例名冲突问题(oracle多个实例名)
- Linux下的PHP编程之旅(linux的php)
- PHP如何使用Redis连接: 代码实例(php连接redis代码)
- php开发MySQL 4.1 PHP开发:越来越优秀(mysql4.1)
- PHP使用Redis扩展连接Redis服务(php开启redis)
- 数据从MySQL中用PHP取得数据(php 获取 mysql)
- PHP连接MSSQL数据库:探索新的接口(php连接mssql接口)
- PHP连接MSSQL:让你更快更好地实现数据互通(php接mssql)
- PHP实现MSSQL数据库的连接(php与mssql连接)
- 深入学习Linux下的PHP编程技巧(linux下php编程)
- Linux下编译安装PHP:一步步走向稳定性(linux编译安装php)
- PHP如何实现与MSSQL的连接(要php链接mssql)
- 用PHP实现Redis缓存一个实例(redis缓存实例php)
- XSLT轻松入门第二章:XSLT的实例
- PHP中常用数组处理方法实例分析
- 《PHP编程最快明白》第七讲:php图片验证码与缩略图
- php缩放图片(根据宽高的等比例缩放)实例介绍
- JS实现简单的Canvas画图实例
- 一组PHP可逆加密解密算法实例代码
- PHP多进程编程实例
- PHP队列用法实例
- PHP编程中的常见漏洞和代码实例
- php+mysqli使用面向对象方式更新数据库实例
- C语言实现单链表逆序与逆序输出实例