利用 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 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
PHP防止跨域提交表单
Nov 01 PHP
Yii框架中memcache用法实例
Dec 03 PHP
php实现无限级分类
Dec 24 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php json相关函数用法示例
Mar 28 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 PHP
Yii 框架使用Forms操作详解
May 18 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开发GUI
2006/10/09 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
python字符串替换示例
2014/04/24 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
简单理解Python中的装饰器
2015/07/31 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
Python3最长回文子串算法示例
2019/03/04 Python
Python字符串的常见操作实例小结
2019/04/08 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
python读写csv文件的方法
2019/08/13 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
大客户销售经理职责
2013/12/04 职场文书
眼镜促销方案
2014/03/15 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
三好生演讲稿
2014/09/12 职场文书
机关作风建设自查报告
2014/10/22 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
学雷锋感言
2015/08/03 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫