利用 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 zend 相对路径问题
Jan 12 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
PHP闭包(Closure)使用详解
May 02 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
PHP多文件上传类实例
Mar 07 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
PHP基本语法实例总结
Sep 09 PHP
php中strtotime函数性能分析
Nov 20 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
php提高脚本性能的4个技巧
Aug 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下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python格式化字符串实例总结
2014/09/28 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
python如何绘制疫情图
2020/09/16 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
优秀护士先进事迹
2014/05/08 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
实习推荐信格式模板
2015/03/27 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang