在过去的几周里,我做了很多研究,试图创建一个连接诊断工具,我不想只是检查连接是否可用,而是诊断是否存在抖动、数据包丢失等。 .
到目前为止,Java 似乎不支持真正的 ICMP 请求,并且有一些解决方法,但没有一个可以实现我想要做的事情。
有谁知道这种工具是否可以构建,或者我应该开始寻找其他选择吗?
在过去的几周里,我做了很多研究,试图创建一个连接诊断工具,我不想只是检查连接是否可用,而是诊断是否存在抖动、数据包丢失等。 .
到目前为止,Java 似乎不支持真正的 ICMP 请求,并且有一些解决方法,但没有一个可以实现我想要做的事情。
有谁知道这种工具是否可以构建,或者我应该开始寻找其他选择吗?
似乎 InetAdress 尽可能使用 ICMP:
https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html
看看 public boolean isReachable(int timeout)
测试该地址是否可达。实现会尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,从而导致无法访问状态,而某些特定端口可能可以访问。如果可以获得特权,典型的实现将使用 ICMP ECHO REQUEST,否则它将尝试在目标主机的端口 7 (Echo) 上建立 TCP 连接。
您可以在此处找到一个简单的使用示例: 如何测试远程系统是否可访问 或此处如何 ping IP 地址
我相信 ICMP4J 完全符合您的需求:Java 的 Internet 控制消息协议
您可以使用“Exec”在命令行运行 ping(假设您的操作系统支持此功能),或使用 JNI 连接到本机应用程序以执行 ping。
创建您自己的 ICMP 协议实现并非易事。
如果您确实使用 Exec,请注意它的局限性,这些局限性在初始测试中并不总是很明显: