php之fsockopen()開放連接埠掃描器詳解

來源:互聯網
上載者:User
本文利用 fsockopen() 函數,編寫一個功能簡單的連接埠掃描器。本執行個體的連接埠號碼是固定的,通過對數組的遍曆,利用 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>';}


<!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>
因為偷懶,把頁面和結果都寫在一起了,布局就將就把。

主要函數介紹

fsockopen

根據一個主機名稱來建立一個串連,成功返回一個資來源物件,失敗返回false;主機不可用是拋出一個警告

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.