利用 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截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
PHP操作xml代码
Jun 17 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
php实现的ping端口函数实例
Nov 12 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
php通过各种函数判断0和空
Jul 04 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
PHP echo()函数讲解
2019/02/15 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
JavaScript的继承实现小结
2017/05/07 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
ant design实现圈选功能
2019/12/17 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
Python面向对象特殊成员
2017/04/24 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
管道维修工岗位职责
2013/12/27 职场文书
环保标语口号
2014/06/13 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年班组长工作总结
2015/04/10 职场文书
植物园观后感
2015/06/11 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers