利用 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&amp;java(三)
Oct 09 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 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三层结构(上) 简单三层结构
2010/07/04 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
php代码书写习惯优化小结
2013/06/20 PHP
php开启openssl的方法
2014/05/15 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
原生JavaScript实现轮播图
2021/01/10 Javascript
Python实现list反转实例汇总
2014/11/11 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
请介绍一下Ant
2016/07/22 面试题
门诊挂号室室长岗位职责
2013/11/27 职场文书
励志演讲稿600字
2014/08/21 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
教师节主题班会教案
2015/08/17 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS