使用java ping多平台

时间:2011-05-30 13:57:37

标签: java java-native-interface ping icmp

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

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

附在括号中,您将获得1141.239的时间,可以将其提供给Float.parseFloat()

答案 3 :(得分:0)

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