2014-01-11 109 views
0

我想Ping一臺基於IP和端口的服務器。爲何端口? 因爲那我建設將有不同的端口登錄服務器和遊戲服務器系統 現在我使用fsockopenPHP ping IP:端口

 $start = microtime(true); 
     $fp = @fsockopen($host, $port, $errno, $errstr, $timeout); 
     if (!$fp) { 
      return false; 
     } 
     else { 
      $ping = microtime(true) - $start; 
      $ping = round($ping * 1000); 
      $res['ip'] = $host; 
      $res['port'] = $port; 
      $res['ping'] = $ping; 
      $res['msg'] = 'success'; 
      return $res; 
     } 

我不能,我不wan't使用EXEC()1。 IP和端口將由用戶輸入,exec()不能ping通端口。

與fsockopen我只能採取延遲(這是不正確的)。

如果有人知道我怎麼不能得到Latensy,數據包發送| recived,抖動等

也許某種第三方API爲PHP平。 預先感謝您

+0

重複?有沒有答案在熱ping IP +端口沒有fsockopen – Froxz

+0

對不起,我的壞。無論如何,你能詳細說明一下你的情況嗎? Ping工作在ICMP協議上,所述不同端口上的登錄服務器/遊戲服務器是否也使用ICMP?我認爲他們應該如果你想實際使用「ping」。 – Gadoma

+0

是登錄服務器/遊戲服務器使用ICMP – Froxz

回答

1

您必須使用socket_create(),因爲ping使用ICMP,而fsockopen僅用於TCP和UDP。 ICMP迴應數據包不指定任何端口。在socket_create手冊中,用戶註釋中有幾個ping()示例實現。

1

可以檢查ICMP分組格式中RFC 792

儘管ICMP是三層協議,但是端口號在layer4定義。所以你永遠不會在ICMP包中找到端口號

這意味着,你可以在兩個主機(IP)之間獲得延遲,但是你不能在IP:端口之間獲得延遲。