php教程

超轻量级php框架startmvc

利用 fsockopen() 函数开放端口扫描器的实例

更新时间:2020-03-23 08:57:22 作者:startmvc
1、前言本文利用fsockopen()函数,编写一个功能简单的端口扫描器。2、关键技术本实例的端

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() 函数开放端口扫描器的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

端口扫描器