溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用 fsockopen() 函數怎么實現一個端口掃描器

發布時間:2020-12-09 15:53:17 來源:億速云 閱讀:179 作者:Leah 欄目:開發技術

利用 fsockopen() 函數怎么實現一個端口掃描器?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

利用 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 &#63; '<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="<&#63;php echo $_POST['ip'] &#63;&#63; '127.0.0.1'&#63;>">
  <button>掃描</button>
 </form>
 <table>
  <thead>
   <tr>
    <td>id</td>
    <td>端口號</td>
    <td>服務</td>
    <td>開啟狀態</td>
   </tr>
  </thead>
  <tbody>
   <&#63;php 
    $ip = $_POST['ip'] &#63;&#63; '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 &#63; '<span >開啟</span>' : '<span >關閉</span>';
     echo '<td>' . $result . '</td>';
     echo '</tr>';
    }

   &#63;>
  </tbody>
 </table>
</body>
</html>
</html> 利用 fsockopen() 函數怎么實現一個端口掃描器
因為偷懶,把頁面和結果都寫在一起了,布局就將就把。

4、主要函數介紹

4.1、fsockopen

根據一個主機名來創建一個連接,成功返回一個資源對象,失敗返回false;主機不可用是拋出一個警告

詳情參考:http://php.net/manual/en/function.fsockopen.php

利用 fsockopen() 函數怎么實現一個端口掃描器

看完上述內容,你們掌握利用 fsockopen() 函數怎么實現一個端口掃描器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女