利用 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数组交集的优化代码分析
Mar 06 PHP
PHP编码转换
Nov 05 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 PHP
Laravel框架自定义分页样式操作示例
Jan 26 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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/02/21 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JS表的模拟方法
2015/02/05 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
Angular实现svg和png图片下载实现
2019/05/05 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
python 利用toapi库自动生成api
2020/10/19 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
幼教个人求职信范文
2013/12/02 职场文书
海飞丝的广告词
2014/03/20 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2015年环卫工作总结
2015/04/28 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
使用 Apache 反向代理的设置技巧
2022/01/18 Servers