假设我运行了几台在本地网络上提供基本请求的服务器(比如说一个家庭网络,所有机器通常都有一个IP,形式为K.K.K.x,其中x是可变的)。有没有简单的方法来发现所有这些服务器?我需要在运行特定Java服务器应用程序的网络上查找每个IP。如何发现本地网络上的Web服务器?
回答
让您拥有一个C类网络...只是尝试打开1和254之间的每个IP地址的特定服务器应用程序的端口如果你想获得幻想,你可以做一些检查,以验证该端口实际上是打开的,它可以满足你对该应用程序的期望。
因为不是每个Web服务器的80
固定端口上侦听,您需要扫描端口。在每个端口上打开(并关闭!)一个套接字,您可以使用java.net.Socket
。如果成功,然后在有关IP /端口上的/
上发起一个简单的GET请求,则可以使用java.net.URLConnection
。如果您收到有效的HTTP响应(不管状态码如何),那么它是一个网络服务器。您可以通过HTTP响应中的Server
头来确定服务器类型。但是,您需要考虑到服务器管理员可能会欺骗/删除/更改默认响应标头。
注意,一些防火墙可以识别端口扫描器的扫描图案并阻止此。
我会scan IP range和测试插座连接到端口80,这样的代码:
try {
s = new Socket(addr,80);
System.out.println("Webserver found on IP:" + addr);
s.close();
}
catch (IOException ex) {
System.out.println("Webserver NOT found on IP:" + addr);
}
不要忘记's.close()'。 – jweyrich 2010-04-26 23:56:45
您是否正在寻找您的Java应用程序中的解决方案?如果您只是在寻找一次性解决方案,nmap应该可以工作。
如果你的本地网络的形式为192 * * *试试这个(我加了sudo的,因为它必须以root身份运行)。
sudo nmap -vv -sS -O -n "192.168.1.1/24"
+1 - 快速且非常强大。 – 2010-04-26 23:06:55
需要root用户,因为您提供的选项执行SYN扫描,这依赖于RAW套接字,并且只能由超级用户创建。 – jweyrich 2010-04-26 23:07:21
有两种基本的方法来实现这一点,并且都要求您向要检查的每个主机发送/接收数据包。
最简单的方法是试图建立TCP连接所需的端口,如你通常做。
一个更复杂的和花式的方法,但在执行方面更快,正在发送一个SYN分组,并且等待一个响应分组。如果响应是SYN/ACK,则表示端口已打开(等待连接),否则不是。但是,Java没有为此提供必要的API(请参阅raw socket)。你必须找到一个库/包装器或使用C和JNI编写一个库。
更多的见解,第二个选项,阅读this。
这样做需要能够推送原始数据包,通常A)不能从Java执行,B)不可取,因为发送原始数据包需要额外的系统特权。如果人们没有以管理员身份运行Windows,那么恶意软件感染的情况就会少得多。 – 2010-04-26 23:27:26
@Devon是正确的,我正在更新我的答案,提到Java没有必要的API。 Microsoft删除了对XP-SP2上原始套接字创建的支持,但您仍然可以创建/发送以太网帧。 – jweyrich 2010-04-26 23:42:18
- 1. 如何访问本地网络(LAN)Web服务器上的网站?
- 2. 在默认网络服务器上发布web服务
- 3. 如何模拟本地服务器上的网络崩溃?
- 4. 如何从本地网络服务器发送邮件
- 5. TCP - JAVA - 如何在本地网络上查找服务器?
- 6. Android:网络服务发现
- 7. CURL - 本地与网络服务器
- 8. $ _SERVER [DOCUMENT_ROOT]本地Apache网络服务器
- 9. 网络服务器上的Python脚本
- 10. 在本地网络中使用Visual Studio Web服务器
- 11. 如何发现Windows Phone 7上的本地网络资源
- 12. 发现内部网络上的Microsoft SQL服务器
- 13. 网络服务器上的本地数据
- 14. 没有网络服务器的web-gui
- 15. 在iphone上的网络服务器和服务发现应用程序
- 16. 如何从IPad连接到本地网络NodeJS服务器?
- 17. 我如何比较两个iOS本地网络服务器?
- 18. 始终显示404非网络部署的Web服务发现
- 19. 在本地网络上搜索服务器
- 20. 在本地网络服务器上搜索文件directorys
- 21. 从本地网络服务器在BlackBerry上流式传输MP3
- 22. 没有填充本地主机,但在网络服务器上?
- 23. 在本地网络(域)服务器上访问TFS
- 24. Asp.Net,上传图片与VS2008本地网络服务器
- 25. 如何浏览本地网络上的Wordpress链接WAMP服务器
- 26. 本地消费的网络服务
- 27. 本地网络中的WCF服务
- 28. 开发Web服务器上的基本Subversion服务器问题
- 29. 实现网络地图服务
- 30. asp.net DB:如何处理在网络服务器上发布?
我并不太热衷于网络。我可以运行1-254,但是如何以跨平台的方式获取IP地址的前3个字节?我的直觉说,有一些工具,如ipconfig/ifconfig,有适当的参数,将返回本地IPV4地址(这将给我我需要的字节),但我想知道是否有更多的java-ish方式。 – 2010-04-27 01:50:43
杜。我只是搜索“获取IP地址Java”。这应该很好。 – 2010-04-27 02:06:10