利用 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 Class 文章
Apr 04 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 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
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python程序退出方式小结
2017/12/09 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
一套Java笔试题
2016/08/20 面试题
竞选班长演讲稿
2013/12/30 职场文书
保险专业求职信
2014/07/07 职场文书
新闻学专业求职信
2014/07/28 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
分享python函数常见关键字
2022/04/26 Python