1、前言
本文利用 fsockopen() 函數,編寫一個功能簡單的端口掃描器。
2、關鍵技術
本實例的端口號是固定的,通過對數組的遍歷,利用 fsockopen() 函數連接,如果連接成功,則該端口處于開放狀態(tài),否則該端口處于關閉狀態(tài)。
核心代碼如下:
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>開啟狀態(tài)</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循環(huán)都是可以的,因為$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
根據一個主機名來創(chuàng)建一個連接,成功返回一個資源對象,失敗返回false;主機不可用是拋出一個警告
詳情參考:http://php.net/manual/en/function.fsockopen.php
以上這篇利用 fsockopen() 函數開放端口掃描器的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業(yè)用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。