использовать например
nmap -sP -PR 192.168.1.0/24
(Используйте соответствующий сетевой адрес и маску)
Для карты хостов. -sP
пропускает сканирование портов, в то время как -PR
запрашивает сканирование ARP, которое работает только в локальных сетях, но не может быть заблокировано брандмауэрами (на самом деле, может, но безумно нецелесообразно).
Вы можете отфильтровать это к образцу списка с некоторыми сценариями:
nmap -sP -PR 192.168.1.0/24 2>/dev/null |grep "appears to be up" |awk '{print $2}'
Чтобы получить физическое местоположение, вам нужен управляемый коммутатор. Хорошие управляемые коммутаторы ответят на SNMP и позволят вам запросить местоположение определенного MAC-адреса.
Сначала вам нужно сопоставить IP с MAC-адресами, вы можете попытаться обработать вывод nmap, но проще обратиться к системной таблице ARP (прочитайте /proc/arp
в * nix или попробуйте команду arp
).
Если у вас есть MAC-адрес, стандартным способом получения порта через SNMP обычно является Q-BRIDGE-MIB, если ваш коммутатор обрабатывает VLAN, или (IIR) P-BRIDGE-MIB. Вы можете запросить его, например, с помощью инструментов net-snmp:
snmpget -v2c -c public 192.168.1.1 Q-BRIDGE-MIB::dot1qTpFdbPort.y.x.x.x.x.x.x
Где public
- это имя сообщества SNMP, 192.168.1.1
- адрес коммутатора, y
- идентификатор VLAN, а x
- байты MAC-адреса в десятичном коде. Возможно, вам потребуется включить SNMP на коммутаторе, разрешить доступ с вашей станции, использовать другое имя сообщества и / или версию протокола.
Для коммутаторов, не поддерживающих VLAN, есть эквивалентные записи в PIRC-MIB iirc.
Чтобы увидеть, как работает кодирование адресов, вы можете использовать snmpwalk
для получения полной таблицы переадресации коммутатора, например:
smpwalk -v2c -c public 192.168.1.1 Q-BRIDGE-MIB::dot1qTpFdbPort
Если у вас есть несколько коммутаторов, каждый MAC будет отображаться на правильном порту на правильном коммутаторе, а также на соответствующих магистральных портах других коммутаторов, поэтому вам потребуется способ отфильтровать магистральные порты.