利用 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 mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
PHP 创建标签云函数代码
May 26 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
浅析is_writable的php实现
Jun 18 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 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/11/06 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
用js重建星际争霸
2006/12/22 Javascript
CSS常用网站布局实例
2008/04/03 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
基于Python正确读取资源文件
2020/09/14 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
求职简历中个人的自我评价
2013/12/25 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
Python的三个重要函数详解
2022/01/18 Python