利用 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_Flame(Version:Progress)的原代码
Oct 09 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
10 个经典PHP函数
Oct 17 PHP
php获取当前页面完整URL地址
Dec 30 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
初识ThinkPHP控制器
Apr 07 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
PHP7 整型处理机制修改
Mar 09 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 什么是PEAR?
2009/03/19 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
javascript中简单的进制转换代码实例
2013/10/26 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
在Python中使用元类的教程
2015/04/28 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Django rest framework实现分页的示例
2018/05/24 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
python中调试或排错的五种方法示例
2019/09/12 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
深圳茁壮笔试题
2015/05/28 面试题
物业保安主管岗位职责
2013/12/25 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
新闻报道稿范文
2015/07/23 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书