2

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

4

6 回答 6

5

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

如果您的本地网络是 192.*.*.* 的形式,试试这个(我添加了 sudo 因为它必须以 root 身份运行):

sudo nmap -vv -sS -O -n "192.168.1.1/24"
于 2010-04-26T22:56:56.133 回答
2

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

于 2010-04-26T22:49:07.527 回答
1

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

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

于 2010-04-26T22:53:59.667 回答
1

有两种基本方法可以实现这一点,都需要您向/从您要检查的每个主机发送/接收数据包。

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

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

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

于 2010-04-26T22:58:59.337 回答
0

我将使用如下代码扫描 IP 范围并测试与端口 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 );
    }
于 2010-04-26T22:56:40.903 回答
-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 位表示网络 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 实用程序,在浏览器窗口中打开先前结果中的每一行。

于 2021-05-21T11:09:59.540 回答