【问题标题】:A way to calculate the round trip time in Java with an IP address, beside the ping command一种在 Java 中使用 IP 地址计算往返时间的方法,在 ping 命令旁边
【发布时间】:2011-02-28 19:22:58
【问题描述】:

我已经使用以下代码在 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。

【问题讨论】:

  • InetAddress.isReachable(您可能需要在 linux 中为 icmp 提供 root 权限,但它在 tcp 上有回退)。不过,最好的办法是打开一个普通的 TCP 套接字。
  • 我已经尝试过 isReachable,但失败得很惨。比ping还差。我也认为打开一个套接字是解决方案,但是我需要一个特定的端口来连接。

标签: java delay ping host roundtrip


【解决方案1】:

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

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

还有使用 TCP 数据包的 traceroute 实现,例如 tcptraceroute 或 layer four traceroute。

来源:traceroute

【讨论】:

  • 谢谢,我之前尝试过 tcptraceroute 但无济于事。但是,通过 LFT,我达到了目标!这是我使用的命令lft -E -V -m 4 ip_here
【解决方案2】:

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

【讨论】:

  • ICMP 在许多路由器上被默认阻止,甚至是 ISP 的。我尝试 ping 的主机愿意“回答”,但缺乏 IT 和 Google 知识以启用 ICMP。该软件在 Linux 发行版上运行,tracert 仅适用于 Windows,并且还使用 ICMP。不过谢谢你的回答!
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 2019-07-28
  • 2015-03-08
  • 2018-01-11
  • 1970-01-01
  • 2023-03-11
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多