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


Posted in PHP onAugust 19, 2017

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, 
    );
    $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>
</html>
因为偷懒,把页面和结果都写在一起了,布局就将就把。

4、主要函数介绍

4.1、fsockopen

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

详情参考:http://php.net/manual/en/function.fsockopen.php

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

以上这篇利用 fsockopen() 函数开放端口扫描器的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP print类函数使用总结
Jun 25 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php自定义时间转换函数示例
Dec 07 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 #PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 #PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 #PHP
Laravel学习教程之本地化模块
Aug 18 #PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 #PHP
Laravel学习教程之路由模块
Aug 18 #PHP
Django中的cookie与session操作实例代码
Aug 17 #PHP
You might like
php 信息采集程序代码
2009/03/17 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
php常用hash加密函数
2014/11/22 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
python分析作业提交情况
2017/11/22 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
民生工作实施方案
2014/05/31 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
十佳青年事迹材料
2014/08/21 职场文书
信用卡工资证明格式
2014/09/13 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS