如何在本地网络上发现Web服务器?

时间:2010-04-26 22:45:48

标签: java sockets discovery

假设我正在运行几台服务器在本地网络上提供基本请求(比如家庭网络,其中所有机器通常都有K.K.K.x形式的IP,其中x是可变的)。有没有一种简单的方法来发现所有这些服务器?我需要在运行特定Java服务器应用程序的网络上找到每个IP。

6 个答案:

答案 0 :(得分:4)

您是否在Java应用程序中寻找解决方案?如果您只是在寻找一次性解决方案,那么nmap应该可以正常工作。

如果您的本地网络的格式为192。*。*。*请尝试此操作(我添加了sudo,因为它必须以root身份运行):

sudo nmap -vv -sS -O -n "192.168.1.1/24"

答案 1 :(得分:2)

所以你有一个C类网络......只是尝试在1到254之间的每个IP地址上打开特定的服务器应用程序端口。如果你想得到花哨,你可以做一些检查来验证端口是否真的打开,它会对您的应用程序做出您期望的事情。

答案 2 :(得分:1)

由于并非每个网络服务器都在80的固定端口上进行侦听,因此您需要扫描端口。在每个端口的套接字的循环中打开(并关闭!),您可以使用java.net.Socket。如果成功,则在{/ 1}}上对相关IP /端口发出简单的GET请求,您可以使用java.net.URLConnection。如果您收到有效的HTTP响应(无论状态代码如何),那么它就是一个Web服务器。您可以通过HTTP响应中的/标头确定服务器类型。但是,您需要考虑服务器管理员可以欺骗/删除/更改默认响应标头。

请注意,某些防火墙可能会识别端口扫描程序的扫描模式并阻止此操作。

答案 3 :(得分:1)

实现此目的有两种基本方法,它们都要求您向要检查的每个主机发送/接收数据包。

  • 最简单的方法是尝试建立与所需端口的TCP连接,正如您通常所做的那样。

  • 一种更复杂和更奇特的方法,但在执行方面更快,就是发送SYN数据包,并等待响应数据包。如果响应是SYN / ACK,则表示端口已打开(等待连接),否则不是。但是,Java没有为此提供必要的API(请参阅raw socket)。您必须找到一个库/包装器或使用C和JNI编写一个。

有关第二个选项的更多见解,请阅读this

答案 4 :(得分:0)

我会scan IP range并使用如下代码测试与端口80的Socket连接:

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 );
    }

答案 5 :(得分:-1)

这是一个老问题,无论如何这个回复针对的是未来的访问者

如果您使用的是 linux 并且安装了 firefox(默认安装)和 nmap,那么您就可以开始使用了。

network="192.168.0.0/24" change this to your local network.
nmap -sn $network | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' |sort |uniq | xargs -n1 -I{} firefox {}

这会在浏览器中打开本地网络中的每个 ip(最大:254),这样您就可以一一检查它们,如果您在家庭网络上(大约 7 左右),通常您不会找到很多 ip。

细分

network=192.168.0.0/24 : 这个代表本地网络,(net-ip/netmask),24的意思是:255.255.255.0(24位代表net-ip,其余的位表示此网络上的可用主机(254 主机)。 您可以输入 ifconfig (linux) 或 ipconfig (windows) 来获取您的本地网络信息。

nmap -sn $notwork : 扫描本地网络中的所有活动 IP (-sn : 禁用端口扫描).

grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1 ,3}':这个正则表达式过滤器从 nmap 结果中返回每个 ip (xxxx)。

排序 | uniq : 排序 ip 并删除副本。

xargs -n1 -I{} firefox {}:借助 firefox 实用程序,在浏览器窗口中打开先前结果的每一行。