如何使用 Linux 查找网络上未使用的 IP 地址?

如何使用 Linux 查找网络上未使用的 IP 地址?

我可以访问网络上的两台计算机(A 和 B)。两台计算机都有一个静态 IP 地址,子网掩码为 255.255.255.128(我已检查DHCP 服务器未被使用)。我想为同一台机器配置多个 IP 地址,因此我想知道子网中已使用的所有 IP 地址。

先前的问题我尝试了nmap -sP -PR 172.16.128.*命令,但我对它的结果持怀疑态度,因为同样的命令在我的两台计算机(A 和 B)上给出了不同的结果。在 A 上,结果显示,8 个 IP 地址的列表(据称)已被使用,包括A 和 B

Nmap done: 256 IP addresses (8 hosts up) scanned in 1.23 seconds

但在 B 上,结果不同,即

Nmap done: 256 IP addresses (0 hosts up) scanned in 0.00 seconds

B上的结果甚至没有显示自己的IP地址以及A的IP地址!

我到底做错了什么?Red Hat Linux(RHEL)中是否有万无一失的方法可以发现我的计算机所属子网中使用的所有 IP 地址?

RHEL: 6.5
Nmap version: 5.51

答案1

以太网 LAN 上任何运行良好的设备都可以忽略几乎所有流量,因此 PING、端口扫描等都不可靠。但是,设备不能随意忽略ARP 请求据我所知。鉴于您指定要扫描本地网络,我发现最不脆弱的方法是尝试连接到远程地址,然后查看我的 ARP 缓存。

这是一个简单的非过滤设备(即未配置为忽略某些类别的 IP 流量的设备):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.351 ms
[...]
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.1
? (192.168.3.1) at b8:27:eb:05:f5:71 [ether] on p1p1

这是一个过滤设备(配置了一行来iptables忽略全部交通):

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.31
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.31
? (192.168.3.31) at b8:27:eb:02:e4:46 [ether] on p1p1

这是一个刚刚瘫痪的设备;请注意,它没有 MAC 地址:

[me@risby tmp]$ ping -c 1 -W 1 192.168.3.241
[...]
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[me@risby tmp]$ arp -a -n|grep -w 192.168.3.241
? (192.168.3.241) at <incomplete> on p1p1

这种方法并非万无一失——首先,它会错过已关闭的设备——但这是我尝试过的最不可怕的方法。

编辑:Eric Duminil,是的,它只能在本地网络上运行;参见第一段。

Vishal,这些方法在功能上是相同的。请注意 Leo 的回答中引用的文字nmap

当特权用户尝试扫描本地以太网网络上的目标时,除非--send-ip另有说明,否则将使用 ARP 请求。

他的方法不需要输入太多的文字。我的方法不需要特权,而且可能让您更好地了解实际发生的情况。但在两种情况下,网络上都会发生同样的事情。

答案2

由于设备无法忽略 ARP 请求,我喜欢使用名为 的工具arp-scan。它在大多数存储库中都可用。

当您使用交换机运行命令时,--localnet它将为您提供整个内部网络的概览。

sudo arp-scan --localnet

提供网络上所有 IP 和 MAC 地址的列表。还可以指定要扫描的网络范围。

sudo arp-scan 172.16.128.0/25

如果您配置了多个网络接口,您可以指定想要与交换机一起使用的接口-I

sudo arp-scan -I eth0 172.16.128.0/25

有关可能的切换的更多信息,请访问https://linux.die.net/man/1/arp-scan或者运行man arp-scan

答案3

我不知道您在 Red Hat 6.5 中运行的是哪个版本的 nmap,但对于最近的版本,我认为正确(且更快)的方法是:

nmap -sn -n 172.16.128.0/25

这将列出您网络中的每个主机(因此,您可以使用该子网中的任何其他 IP,因为它应该可用)。

编辑并注明:您提到的子网是 255.255.255.128,但随后您显示输出为扫描 254 台主机。除非我遗漏了什么,否则应该是 /25 掩码和 126 台可用主机。如果您想扫描 /24,请将上述命令更改为查询所有 254 台主机。

从 nmap 书中,-sP已停止使用并替换为-sn

-sn(无端口扫描)

此选项告诉 Nmap 在主机发现后不要进行端口扫描,而只打印出响应主机发现探测的可用主机。这通常称为“ping 扫描”,但您也可以请求运行 traceroute 和 NSE 主机脚本。默认情况下,这比列表扫描更具侵入性,并且通常可用于相同目的。它允许对目标网络进行轻度侦察而不会引起太多注意。知道有多少主机处于启动状态对攻击者来说比列表扫描提供的每个 IP 和主机名的列表更有价值。

系统管理员也经常发现此选项很有价值。它可以轻松用于计算网络上的可用机器或监控服务器可用性。这通常称为 ping 扫描,比 ping 广播地址更可靠,因为许多主机不回复广播查询。

使用 -sn 执行的默认主机发现默认包括 ICMP 回显请求、TCP SYN 到端口 443、TCP ACK 到端口 80 以及 ICMP 时间戳请求。当由非特权用户执行时,只有 SYN 数据包会(使用连接调用)发送到目标上的端口 80 和 443。当特权用户尝试扫描本地以太网上的目标时,除非指定了 --send-ip,否则将使用 ARP 请求。-sn 选项可以与任何发现探测类型(-P* 选项,不包括 -Pn)结合使用,以获得更大的灵活性。如果使用任何这些探测类型和端口号选项,则会覆盖默认探测。当运行 Nmap 的源主机和目标网络之间有严格的防火墙时,建议使用这些高级技术。否则,当防火墙丢弃探测或其响应时,可能会错过主机。

在 Nmap 的先前版本中,-sn 被称为 -sP。

-n是为了避免客户端的 DNS 解析(使扫描更快):

-n(无 DNS 解析)

告诉 Nmap 永远不要对找到的活动 IP 地址进行反向 DNS 解析。由于即使使用 Nmap 的内置并行存根解析器,DNS 也可能很慢,因此此选项可以缩短扫描时间。

您可以使用其他组合来深化扫描或服务,但这应该足以满足您的要求,除非主机正在掩盖自己或放弃所有内容。

来源: https://nmap.org/book/man-host-discovery.html

答案4

IPv6

不要以为 IPv4 是您唯一的选择。即使您的 ISP 不提供 V6 连接,许多现代操作系统也能很好地处理 IPv6。

甚至可能存在只能通过 IPv6 或其他协议访问的设备。

有很多方便的多播地址记录在 https://en.wikipedia.org/wiki/Multicast_address#IPv6 但对你来说有趣的是ff02::1

root@thionite:~# ping6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::4261:86ff:fec4:cbaa%eth0 eth0: 56 data bytes
64 bytes from fe80::4261:86ff:fec4:cbaa%eth0: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from fe80::21a:4dff:fe26:85ee%eth0: icmp_seq=1 ttl=64 time=0.215 ms (DUP!)
64 bytes from fe80::6a05:caff:fe10:535f%eth0: icmp_seq=1 ttl=64 time=0.233 ms (DUP!)
64 bytes from fe80::226:55ff:feda:299c%eth0: icmp_seq=1 ttl=64 time=0.334 ms (DUP!)
64 bytes from fe80::20d:b9ff:fe35:29c4%eth0: icmp_seq=1 ttl=64 time=0.501 ms (DUP!)
64 bytes from fe80::21e:c2ff:fe13:36bf%eth0: icmp_seq=1 ttl=64 time=0.512 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=0.518 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=0.757 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=0.772 ms (DUP!)
64 bytes from fe80::60cc:69ff:fe4f:7db0%eth0: icmp_seq=1 ttl=64 time=0.992 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe32:3232%eth0: icmp_seq=1 ttl=64 time=1.00 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe30:3030%eth0: icmp_seq=1 ttl=64 time=1.24 ms (DUP!)
64 bytes from fe80::90e4:77ff:fe31:3131%eth0: icmp_seq=1 ttl=64 time=1.34 ms (DUP!)
64 bytes from fe80::6ca6:e5ff:fe78:daca%eth0: icmp_seq=1 ttl=64 time=2.35 ms (DUP!)
64 bytes from fe80::b639:d6ff:feab:1000%eth0: icmp_seq=1 ttl=64 time=7.04 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:85d8%eth0: icmp_seq=1 ttl=1 time=8.02 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:8506%eth0: icmp_seq=1 ttl=1 time=8.03 ms (DUP!)
64 bytes from fe80::3e4a:92ff:fe76:e550%eth0: icmp_seq=1 ttl=1 time=8.06 ms (DUP!)
64 bytes from fe80::212:12ff:fef7:8044%eth0: icmp_seq=1 ttl=64 time=8.24 ms (DUP!)
64 bytes from fe80::8edc:d4ff:fef2:67e0%eth0: icmp_seq=1 ttl=64 time=18.3 ms (DUP!)
64 bytes from fe80::21e:c2ff:fea9:6d71%eth0: icmp_seq=1 ttl=64 time=295 ms (DUP!)
...repeats

相关内容