您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

fsockopen() 函数制作端口扫描器

2024/12/31 11:02:34发布20次查看
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 style="color:red">开启</span>' : '<span style="color:red">关闭</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,                      3389                 );                 $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 style="color:red">开启</span>' : '<span style="color:red">关闭</span>';                     echo '<td>' . $result . '</td>';                     echo '</tr>';                 }            ?>         </tbody>     </table> </body> </html>
4、主要函数介绍
4.1、fsockopen
根据一个主机名来创建一个连接,成功返回一个资源对象,失败返回false;主机不可用是抛出一个警告
详情参考:http://php.net/manual/en/function.fsockopen.php
以上就是fsockopen() 函数制作端口扫描器的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product