利用 fsockopen() 函數(shù)開放端口掃描器的實例
1、前言
本文利用 fsockopen() 函數(shù),編寫一個功能簡單的端口掃描器。
2、關鍵技術
本實例的端口號是固定的,通過對數(shù)組的遍歷,利用 fsockopen() 函數(shù)連接,如果連接成功,則該端口處于開放狀態(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='#'> 網(wǎng)址/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是對應的,都是索引數(shù)組 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> 
因為偷懶,把頁面和結(jié)果都寫在一起了,布局就將就把。
4、主要函數(shù)介紹
4.1、fsockopen
根據(jù)一個主機名來創(chuàng)建一個連接,成功返回一個資源對象,失敗返回false;主機不可用是拋出一個警告
詳情參考:http://php.net/manual/en/function.fsockopen.php
以上這篇利用 fsockopen() 函數(shù)開放端口掃描器的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用PHP和HTML5 FormData實現(xiàn)無刷新文件上傳教程
這篇文章主要介紹了使用PHP和HTML5 FormData實現(xiàn)無刷新文件上傳教程,本文先是分解了程序的編寫步驟,最后給出一個完整示例,需要的朋友可以參考下2014-09-09在IIS7.0下面配置PHP 5.3.2運行環(huán)境的方法
最近心血來潮,想學習一下php,既然想學習了就得需要搭環(huán)境。在網(wǎng)上找來找去都是說IIS5.0或者6.0的配置。真是看得云里霧里的,這樣直接影響了我的判斷力?,F(xiàn)特意寫下來在IIS7.0下面如何進行配置PHP。2010-04-04PHP的fsockopen、pfsockopen函數(shù)被主機商禁用的解決辦法
這篇文章主要介紹了PHP的fsockopen、pfsockopen函數(shù)被主機商禁用的解決辦法,一是使用stream_socket_client函數(shù)代替,二是寫一個類似fsockopen功能的自定義函數(shù),需要的朋友可以參考下2014-07-07Laravel框架中VerifyCsrfToken報錯問題的解決
這篇文章主要給大家介紹了關于Laravel框架中VerifyCsrfToken報錯問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習,需要的朋友們下面跟著小編來一起學習學習吧。2017-08-08