2011-02-28 153 views
0

我實現的方式用下面的代碼來獲得Java中的RTT在UNIX系統上旁邊的方式:計算往返時間在Java中有一個IP地址,ping命令

String command[] = {"ping", "-c4", theIPAddress}; 
ProcessBuilder pb = new ProcessBuilder(command); 
pb.redirectErrorStream(true); 
Process p = pb.start(); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while((line = in.readLine()) != null) 
    //the terminal output with the ping results... 
etc... 

這工作正常,我可以用輸出計算出毫秒的RTT(延遲)。 但是,如果主機阻塞了ICMP,則ping將超時。 (即使在Mac OS X終端或Windows CMD。)

現在我想找到另一種方式來獲得IP地址的RTT /延遲。 (我不想在主機端安裝軟件。) 如果您無法提供給我一個Java示例,請給我其他輸入。我可以翻譯多種語言,我真的可以使用Google。

+0

'InetAddress.isReachable'(您可能需要根在Linux的ICMP,但它已經退卻上TCP)。不過,你最好打開一個普通的TCP套接字。 – bestsss 2011-02-28 19:32:26

+0

我已經試過isReachable,但失敗慘敗。比平還差。我也認爲,打開一個插座將是解決方案,但我需要一個特定的端口連接。 – Gianni 2011-03-01 12:24:36

回答

1

Tracert是treaceroute的縮寫(並且是最後我檢查的windows命令),什麼是路徑ping - 它也使用ICMP。

Linux上的等效命令是tracepath和在類Unix操作系統中,traceroute效用默認使用用戶數據報協議(UDP)數據報從33434目的地端口編號,以33534.路由跟蹤實用程序通常具有option指定使用ICMP回顯請求(類型8),而不是Windows tracert實用程序所使用的。

也有跟蹤路由的實現使用TCP數據包,如tcptraceroutelayer four traceroute

來源:traceroute

+0

謝謝,我已經嘗試過tcptraceroute但無濟於事。但是,通過LFT我可以達到目標!這是我使用'lft -E -V -m 4 ip_here'的命令 – Gianni 2011-03-01 18:26:04

1

如果主機阻塞了ICMP,他不希望你這樣做。嘗試使用tracert來代替?

+0

許多路由器,甚至ISP的ICMP在默認情況下都被阻塞。我嘗試ping的主機願意「回答」,但缺乏對IT和Google的瞭解,無法啓用ICMP。該軟件在Linux發行版上運行,tracert僅適用於Windows,並且也使用ICMP。但是,謝謝你的回答! – Gianni 2011-03-01 16:50:58