我目前正在为大学更新项目。问题中的程序访问IP地址并确定IP是否托管网站。该系统的目标是确定Web的大小(分布在可用系统上,最后一次运行需要2.5个月)。
目前的目标是尝试减少为IP做出准确决定所需的时间,但是我很遗憾为了改善这一点。目前,以下是测试的主要来源(当然还有其他逻辑):
Socket s = new Socket();
s.connect(new InetSocketAddress(address, 80), timeout);
我主要寻找/寻求帮助的是,如果有更快的方法来确定IP是否托管网站,同时保持准确。当前系统使用30秒的超时值,因此大量IP地址检查需要30秒,因为许多IP不承载网站。任何指向Java库或算法论文的帮助都将不胜感激。
感谢。
答案 0 :(得分:0)
当然,您是并行执行此操作,即在尝试另一个套接字之前不会阻塞30秒?
您可以同时打开的插座数量有限制,但您应该能够同时打开至少100个插座。
答案 1 :(得分:0)
确定主机是否愿意为您提供给定端口上的网页的唯一可靠方法是请求它,这将始终导致打开TCP套接字并发送HTTP GET-Request。但是,您可以使用NMAP http://nmap.org/中的技术(和c-libraries)来有效地检测是否存在TCP端点:80。当然,你可以调整你的程序,同时检查几千个主机,每个公共IP ......
但请注意,您的整个方法只能在端口80上提供非常模糊数量的Web服务器,仅此而已。每个http-host还有其他端口,加密(SSL)和多个网站,这些都与您的安装相混淆。不要忘记有IPv4和IPv6。
答案 2 :(得分:0)
正如昨天所说,Nmap绝对是一个不错的选择。如果您选择沿着这条路走下去,那么在sourceforge.net上有一个名为Nmap4j的Java包装器库,它可以更容易地集成到Java程序中。
干杯!
答案 3 :(得分:-2)
此处列出了所有端口:
http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
我要做的第一件事就是限制端口搜索范围 然后我尝试使用的“普通”端口(80,8080,443,...)。等待秒数不受限制。