利用 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的特殊设置
Oct 09 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
PHP 实现重载
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依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
javascript 学习笔记(onchange等)
2010/11/14 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
python分析作业提交情况
2017/11/22 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
Python入门之后再看点什么好?
2018/03/05 Python
python自动生成model文件过程详解
2019/11/02 Python
如何基于python实现归一化处理
2020/01/20 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
Python读写压缩文件的方法
2020/07/30 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
岗位职责风险防控
2014/02/18 职场文书
安全生产活动月方案
2014/03/09 职场文书
毕业自我鉴定书
2014/03/24 职场文书
协议书范文
2015/01/27 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
成绩单家长意见
2015/06/03 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python