0

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

4

2 回答 2

1

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

于 2011-02-28T19:30:03.133 回答
1

Tracert是traceroute 的缩写(并且是我上次检查的windows 命令),什么是路径ping - 它也使用ICMP。

在 linux 上,等效命令是tracepath,在类 Unix 操作系统上,该traceroute实用程序默认使用目标端口号从 33434 到 33534 的用户数据报协议(UDP) 数据报。traceroute 实用程序通常具有option指定使用ICMP回显请求(类型8) 而是由 Windowstracert实用程序使用。

还有一些使用 TCP 数据包的 traceroute 实现,例如tcptraceroutelayer four traceroute

来源:跟踪路由

于 2011-02-28T19:45:20.760 回答