这里有新鲜出炉的精品教程,程序狗速度看过来!
下面小编就为大家带来一篇利用 fsockopen() 函数开放端口扫描器的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
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=e xplode(
- '.', $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() 函数开放端口扫描器的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHPERZ。
来源: http://www.phperz.com/article/17/1105/350584.html