在Java中,除了ping命令之外,还有一种使用IP地址计算往返时间的方法

在Java中,除了ping命令之外,还有一种使用IP地址计算往返时间的方法,java,delay,ping,host,roundtrip,Java,Delay,Ping,Host,Roundtrip,我用以下代码实现了一种在unix系统上用Java获取RTT的方法: String command[] = {"ping", "-c4", theIPAddress}; ProcessBuilder pb = new ProcessBuilder(command); pb.redirectErrorStream(true); Process p = pb.start(); BufferedReader in = new BufferedReader(new InputStreamReader(p.

我用以下代码实现了一种在unix系统上用Java获取RTT的方法:

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示例,请给我其他的输入。我可以在多种语言之间进行翻译,而且我真的可以使用谷歌。

如果主机阻止了ICMP,他不希望您这样做。尝试tracert?

tracert
是treaceroute的缩写(也是我上次检查的windows命令),它只是路径ping-它还使用ICMP

在linux上,等效的命令是
tracepath
,在类似Unix的操作系统上,
traceroute
实用程序默认使用目标端口号为33434到33534的用户数据报协议(UDP)数据报。traceroute实用程序通常有一个
选项
来指定使用ICMP回显请求(类型8),就像Windows
tracert
实用程序所使用的那样

还有使用TCP数据包的跟踪路由实现,例如
tcptraceroute
第四层跟踪路由


来源:

InetAddress.isReachable
(icmp可能需要linux中的root,但它在tcp上有回退)。不过,你最好还是打开一个普通的TCP套接字。我已经尝试过isRecable,但失败得很惨。比平还要糟糕。我还认为打开一个套接字将是解决方案,但我需要一个特定的端口来连接。默认情况下,ICMP在许多路由器上被阻止,即使是ISP。我尝试ping的主机愿意“回答”,但缺乏IT和谷歌方面的知识,无法启用ICMP。该软件在Linux发行版上运行,tracert仅适用于Windows,还使用ICMP。但是谢谢你的回答!谢谢,我以前试过tcptraceroute,但没用。然而,有了LFT我就达到了目标!这是我在这里使用的命令