利用 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 相关文章推荐
用文本文件实现的动态实时发布新闻的程序
Oct 09 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
php class类的用法详细总结
Oct 17 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
PHP递归获取目录内所有文件的实现方法
Nov 01 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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+DBM的同学录程序(2)
2006/10/09 PHP
php正则校验用户名介绍
2008/07/19 PHP
PHP 翻页 实例代码
2009/08/07 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
React组件的三种写法总结
2017/01/12 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Python线程详解
2015/06/24 Python
Django实现分页功能
2018/07/02 Python
Python global全局变量函数详解
2018/09/18 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
EJB的基本架构
2016/09/22 面试题
聘用意向书范本
2014/04/01 职场文书