Похоже, я получаю переменные и непоследовательные результаты для IP / MAC-адресов с определенной машины с помощью nmap или arp-scan.
У машины 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
...
Итак, какие бы инструменты и опции я ни использовал, я ожидал:
Но 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
только отчеты один из MAC-адресов на обоих IP-адресах:
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. Без сканирования портов.)
Ну, во-первых, вы используете несовместимые / перекрывающиеся подсети. 192.168.81.129/25 является частью 192.168.81.54/24. Итак, сначала выполните ifconfig eth0 netmask 255.255.255.128. Далее, поскольку я могу только представить, что eth0 подключен к той же сети, что и eth1, вы захотите ограничить, насколько быстро ваш компьютер будет реагировать на ARP.
Вам нужно установить следующие записи sysctl вручную или в /etc/sysctl.conf:
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 отвечает на запрос ARP для IP-адреса, назначенного компьютеру, с MAC-адресом сетевой карты, на которой он получил запрос, независимо от того, был ли запрошенный IP настроен на отвечающем сетевом адаптере или нет. Кроме того, Linux по умолчанию принимает IP-пакет на любой сетевой карте, предназначенной для IP-адреса, настроенного локально на компьютере. Так,
Приведенные выше параметры sysctl ограничивают такое поведение, так что Linux будет отвечать на запрос ARP для IP только в том случае, если он получен на сетевом адаптере, которому назначен IP, и если запрос поступает с IP-адреса, доступного через этот сетевой адаптер. Перестройки задокументированы в файле ip-sysctl.txt в исходном коде ядра.
То, что вы видите, является предполагаемым поведением, и то, что я предлагаю, меняет вещи, чтобы действовать в большей степени по вашему желанию. Удачи.