你能用Java运行真正的ping吗?

时间:2015-03-10 16:19:28

标签: ping icmp diagnostics traceroute packet-loss

在过去几周我尝试创建连接诊断工具时做了大量的研究,我不想只是检查连接是否可用但是要诊断是否存在抖动,数据包丢失等等。

到目前为止,似乎Java不支持真正的ICMP请求,并且有一些解决方法,但没有一个可以达到我想要做的。

有谁知道是否可以构建这种工具,还是应该开始研究其他选项?

3 个答案:

答案 0 :(得分:0)

您可以使用' Exec'在命令行运行ping(假设您的操作系统支持此操作),或JNI连接到本机应用程序以执行ping操作。

创建自己的ICMP协议实现并非易事。

如果您确实使用Exec,请注意它在初始测试中并不总是很明显的限制:

答案 1 :(得分:0)

我相信ICMP4J正是您所需要的:Internet Control Message Protocol for Java

答案 2 :(得分:0)

似乎InetAdress在可能的情况下正在使用ICMP:

https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

看看公共布尔isReachable(int超时)

  

测试该地址是否可访问。尽力而为   实现以尝试到达主机,但防火墙和服务器   配置可能会阻止请求,从而导致无法访问状态   而某些特定端口可能是可访问的。典型的实现   如果可以获得特权,将使用ICMP ECHO REQUESTs,   否则它将尝试在端口7(Echo)上建立TCP连接   目标主机。

您可以在此处找到一个简单的使用示例: How to test if a remote system is reachable 或这里How to ping an IP address