использовать например
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 ''
Чтобы получить физическое местоположение, вам нужен управляемый коммутатор. Хорошие управляемые коммутаторы ответят на 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, в i-rc P-BRIDGE-MIB есть эквивалентные записи.
Чтобы увидеть, как работает кодирование адресов, вы можете использовать snmpwalk
для получения полной таблицы переадресации коммутатора, например:
smpwalk -v2c -c public 192.168.1.1 Q-BRIDGE-MIB::dot1qTpFdbPort
Если у вас есть несколько коммутаторов, каждый MAC будет отображаться на правильном порту на правильном коммутаторе, а также на соответствующих магистральных портах других коммутаторов, поэтому вам потребуется способ отфильтровать магистральные порты.