利用 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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
随时给自己贴的图片加文字的php水印
Mar 16 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
linux iconv方法的使用
Oct 01 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
php获取远程文件大小
Oct 20 PHP
php中session定期自动清理的方法
Nov 12 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
Jul 24 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
Zerg建筑一览
2020/03/14 星际争霸
解析dedeCMS验证码的实现代码
2013/06/07 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python实现的一个简单LRU cache
2014/09/26 Python
详解Python3中yield生成器的用法
2015/08/20 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
python中有函数重载吗
2020/05/28 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
广告学专业求职信
2014/06/19 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
经理助理岗位职责
2015/02/02 职场文书
纪委立案决定书
2015/06/24 职场文书
宿舍管理制度范本
2015/08/07 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
会计专业自荐信范文
2019/05/22 职场文书