2017-02-17 22 views
0

正如問題所述,我使用這個PHP函數來檢查特定端口上的IP地址是否正在應答。在Windows機器上ping什麼端口來檢查它是否在線?

function ping($host) { 

    $port = 5900; //RealVNC default port 
    $waitTimeoutInSeconds = 0.01; 

    if ($fp = @fsockopen($host, $port, $errCode, $errStr,$waitTimeoutInSeconds)) { 
     fclose($fp); 
     echo '<img src="online.png"> '; 
    } else { 

     echo '<img src="offline.png"> '; 
    } 
} 

是否有窗口(7,8,10),其可以「ping通」通過這個腳本來檢查它是否沒有啓用或安裝任何東西可到達任何默認端口? - 我想檢查我的網絡中500臺PC的狀態。

+0

爲什麼不 「平」 *主機*而不是 「平」 *端口*? ref:http://php.net/manual/en/function.socket-create.php – alexus

回答

0

裁判:PHP: socket_create - Manual

<?PHP 
     function ping($host, $timeout = 1) { 
       /* ICMP ping packet with a pre-calculated checksum */ 
       $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; 
       $socket = socket_create(AF_INET, SOCK_RAW, 1); 
       socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); 
       socket_connect($socket, $host, null); 

       $ts = microtime(true); 
       socket_send($socket, $package, strLen($package), 0); 
       if (socket_read($socket, 255)) 
         $result = microtime(true) - $ts; 
       else $result = false; 
       socket_close($socket); 

       return $result; 
     } 
?> 
+0

這段代碼給了我錯誤socket_set_option()期望參數1是每個函數的資源等等 – Houdasek

+0

代碼是11歲,它可能無法正常工作,因爲php最近的變化。代碼主要是供參考(不適合你通過複製粘貼在你的環境中運行它) – alexus

+0

好的,謝謝你會看看:) – Houdasek

0

如果您在Windows環境中,或者您可以在Linux環境中使用nmap來運行給定網絡ID的完整掃描,則可以使用找到免費的IP掃描器。

用nmap的下一個命令:

nmap -sP 192.168.2.1/24 

將顯示192.168.2.X網絡上的所有在線的客戶端。

下面是一個PHP IP掃描器腳本的鏈接: https://gist.github.com/blazeeboy/808796

的Nmap通常默認的Linux操作系統自帶除非它是一個最小化安裝。

+0

不幸的是我需要用php來做到這一點 – Houdasek

+0

你不能使用系統命令與PHP? –

+0

更新了我的回答 –