7

我需要对某个 ip/机器执行 ping 操作。该代码可以在任何类型的平台(windows、linux、mac)上执行,我需要获取有关丢失和往返时间的信息。所以 java 的 ping 执行不够好,因为我需要将 ping 响应解析为字符串,每个平台和每个操作系统语言都不同。所以我需要做什么?我知道有类似 JNI 的东西,但我是 java 新手,所以在这里需要一点帮助。这仍然意味着我需要每个平台都有本地实现吗?有什么例子或建议吗?

4

4 回答 4

5

由于 java 不是平台独立的,您可以询问您使用的是哪个操作系统System.getProperty("os.name")并解析响应或根据它定义命令。

或者,您可以使用isReachable(int timeout)in InetAddresswhich 似乎是最接近 ICMP ECHO REQUEST 的实现,但它不会为您提供有关丢失和往返时间的信息。

另一个想法是使用 tracert/tracepath 而不是 ping 来进行往返?检查此线程以获取更多信息。

于 2011-05-30T14:38:48.937 回答
1

你不能用纯 Java 做真正的 ICMP。不过,可移植的jpcap库为本地库提供了一个很好的 Java 接口,包括 ICMP (ping)。

于 2011-05-30T14:02:16.033 回答
0

我想解析仍然是你最简单的选择。如果您需要的不仅仅是这个正则表达式,我会感到惊讶:

time[<=]([0-9.]+)[ ]?ms

括在括号中,您将获得类似1or141.239可以喂给的时间Float.parseFloat()

于 2011-05-30T14:13:17.403 回答
0

我已经使用 JNI 来获取 ping 命令。我已经使用本机(C)实现了 ping,然后用 JNI 包装了它。降级是需要为每个平台编译 C dll。

于 2011-06-22T11:25:53.497 回答