我似乎使用 nmap 或 arp-scan 从特定机器获得了可变且不一致的 IP/MAC 地址结果。
该机器有3个接口,显示的是:
$ uname -a
Linux showstore-81 2.6.35.13 #1 SMP PREEMPT Thu Feb 9 12:20:36 PST 2012 i686 GNU/Linux
$ LC_ALL=C /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:1b:21:ac:17:19
inet addr:192.168.81.54 Bcast:192.168.81.255 Mask:255.255.255.0
...
eth1 Link encap:Ethernet HWaddr 00:25:90:25:d0:4e
inet addr:192.168.81.129 Bcast:192.168.81.255 Mask:255.255.255.128
...
eth2 Link encap:Ethernet HWaddr 00:25:90:25:d0:4f
inet addr:169.254.1.1 Bcast:169.254.255.255 Mask:255.255.0.0
...
因此,无论我使用什么工具和选项,我都期望:
- IP .54 => MAC 00:1b:21:ac:17:19
- IP .129 => MAC 00:25:90:25:d0:4e
但是nmap -n -sP 192.168.81.0/24
(nmap v. 5.00)报告了这一点反转:
Host 192.168.81.54 is up (0.000078s latency).
MAC Address: 00:25:90:25:D0:4E (Super Micro Computer)
Host 192.168.81.129 is up (0.000058s latency).
MAC Address: 00:1B:21:AC:17:19 (Intel Corporate)
并且nmap -n -sP -PR 192.168.81/24
仅报告两个 IP 上的其中一个 MAC 地址:
Host 192.168.81.54 is up (0.000081s latency).
MAC Address: 00:1B:21:AC:17:19 (Intel Corporate)
Host 192.168.81.129 is up (0.00011s latency).
MAC Address: 00:1B:21:AC:17:19 (Intel Corporate)
最后,arp-scan -l
(v.1.8.1)报告两个 IP 地址各两次,两个 MAC 地址各两次:
192.168.81.54 00:1b:21:ac:17:19 Intel Corporate
192.168.81.54 00:25:90:25:d0:4e Super Micro Computer, Inc.
192.168.81.129 00:1b:21:ac:17:19 Intel Corporate
192.168.81.129 00:25:90:25:d0:4e Super Micro Computer, Inc.
我怎样才能进行扫描并得到正确的结果?(我只需要 IP 和 MAC。不需要端口扫描。)
答案1
首先,您使用的子网不一致/重叠。192.168.81.129/25 是 192.168.81.54/24 的一部分。因此,首先,执行 ifconfig eth0 netmask 255.255.255.128。接下来,由于我只能想象 eth0 与 eth1 插入同一个网络,因此您需要限制计算机对 ARP 的响应速度。
您将需要手动或在 /etc/sysctl.conf 中设置以下 sysctl 条目:
net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.all.arp_filter=1 net.ipv4.conf.all.arp_announce=1 net.ipv4.conf.all.arp_ignore=2 net.ipv4.conf.all.shared_media=0
更新此内容以包含更多信息。通常,Linux 将使用接收请求的 NIC 的 MAC 地址来响应分配给计算机的 IP 地址的 ARP 请求,无论请求的 IP 是否在响应的 NIC 上配置。此外,默认情况下,Linux 将接受任何 NIC 上的 IP 数据包,该数据包发往计算机上本地配置的 IP 地址。因此,
上述 sysctl 设置限制了该行为,使得 Linux 仅响应 IP 的 ARP 请求(如果该请求在分配了 IP 的 NIC 上收到,并且请求来自可通过该 NIC 访问的 IP 地址)。可调参数记录在内核源代码分发中的文件 ip-sysctl.txt 中。
您所看到的是预期行为,而我建议的改变是让事情更符合您的期望。祝您好运。