利用 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代码
Dec 06 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
php微信开发之谷歌测距
Jun 14 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常用的文件操作函数经典收藏
2013/04/02 PHP
CI框架中zip类应用示例
2014/06/17 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
python Pygame的具体使用讲解
2017/11/03 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
python实现验证码识别功能
2018/06/07 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
简单了解如何封装自己的Python包
2020/07/08 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
JNI的定义
2012/11/25 面试题
自主招生自荐信格式
2013/12/03 职场文书
财务部经理岗位职责
2014/02/03 职场文书
安全生产承诺书
2014/03/26 职场文书
高三霸气励志标语
2014/06/24 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
2014年物流工作总结
2014/11/25 职场文书
合同纠纷调解书
2015/05/20 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript