我试图查明我的网络上的特定主机是否可以访问。
我的java代码如下:
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
这工作得很好,但是如果我将超时降低到 500 毫秒,它将不再指定主机可达。我计划循环检查相当多的主机,因此较短的超时时间非常重要。如果我从 Windows 命令行手动 ping 主机,则需要不到 10 毫秒。
那么为什么 Java 方法需要更高的超时才能成功呢?
有没有其他方法可以使用isReachable()
?
这取决于您所说的可达性是什么意思。如果您只找到侦听特定端口的可访问主机,则可以打开到该端口的套接字连接(例如,通过检查端口 80 查找所有 HTTP 服务器)。使用 InetAddress.isReachable() 取决于实现。根据 javadoc,“典型的实现将使用 ICMP ECHO REQUEST”。使用 Java NIO(非阻塞 I/O)进行“已知端口”检查(如 http(80)、smb (445) 等)可以获得更高的性能。我公司有一款产品,使用“已知端口”扫描来查找运行 Telnet 或 SSH 的机器,使用 NIO,我们可以扫描大约 5000 个 IP/秒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)