我目前正在为大学更新一个项目。相关程序会访问 IP 地址并确定该 IP 是否托管网站。该系统的目标是确定网络的大小(分布在可用系统中,上次运行花费了 2.5 个月)。
当前的目标是尝试减少为 IP 做出准确决策所需的时间,但我对改进这一点感到迷失。目前,以下是测试的主要来源(当然还有附加逻辑):
Socket s = new Socket();
s.connect(new InetSocketAddress(address, 80), timeout);
我主要寻找/寻求帮助的是是否有任何更快的方法来确定 IP 是否托管网站,同时保持准确。当前系统使用 30 秒的超时值,因此大量 IP 地址检查需要这 30 秒,因为许多 IP 不托管网站。任何指向 Java 库或算法论文的帮助将不胜感激。
谢谢。
最佳答案
确定主机是否愿意在给定端口上为您提供网页的唯一可靠方法是发出请求,这始终会导致打开 TCP 套接字并发送 HTTP GET 请求。但是,您可以使用 NMAP http://nmap.org/ 中的技术(和 C 库)有效检测 :80 是否有 TCP 端点。当然,您可以调整程序以同时检查每个公共(public) IP 的数千台主机...
但是请注意,您的整个方法只能在端口 80 上提供非常 模糊数量的 Web 服务器,仅此而已。每个 http 主机还有其他端口、加密 (SSL) 和多个网站,这些都会干扰您的测量。并且不要忘记还有 IPv4 和 IPv6。
关于java - 确定给定 IP 是否为 Web 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818741/