Сканирование локальной сети и поиск рабочих станций (практический пример)


Я не буду сегодня сильно углубляться в теорию, что и как я делаю, просто пробехимся по типовой задаче на реальном окружении. Во первых, все хозяйство на требуемом филиале управляется маршрутизатором Microtic и соответственно все устройства с динамическим IP-адресом мы можем увидеть в списке устройст арендовавших DHCP-адреса. Для просмотра всех устройств арендовавших адреса в нашей локальной сети переходим IP -> DHCP Server -> Leases:

Но, в этом списке мы увидим только тех кто арендовал адреса у DHCP-сервера, но не увидим рабочие станции со статическими адресами и вот тут то нам поможет еще одна замечательная утилитка arp-scan, но обратите внимание, что запускать ее надо с рабочей станции или сервера в этой сети:

# arp-scan -l --interface=enp2s0

В результате выполнения команды мы получим примерно такой вывод данных:

Interface: enp2s0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.54.4.1      e4:8d:8c:00:b6:5f      (Unknown)
10.54.4.2      02:00:00:6d:0f:09      (Unknown)
...
10.54.4.80     c8:2a:14:58:78:ff      Apple Inc
10.54.4.99     f2:29:ef:04:62:75      (Unknown)
10.54.4.10     a4:08:ea:fe:b7:12      (Unknown)
10.54.4.11     40:9c:28:67:ea:60      (Unknown)
10.54.4.200    ec:eb:b8:c4:a0:c0      (Unknown)
10.54.4.240    8c:dc:d4:5d:f7:e8      (Unknown)
10.54.4.253    30:9c:23:25:12:aa      (Unknown)
10.54.4.50     50:8f:4c:77:97:4a      (Unknown) (DUP: 1)

29 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.282 seconds (199.69 hosts/sec). 28 responded

ARP-scan не входит в штатную поставку дистрибутива, поэтому ее надо установить:

# apt install arp-scan

Следующим этапом мы попробуем более детально выяснить что это за адреса и на этом этапе мы будем использовать Nmap, он естественно, тоже в поставку не входит и первым делом мы его установим:

# aptitude install nmap

Теперь напишем небольшой скрипт который проанализирует полученные от arp-scan данные и выгрузит результаты в /tmp/scan/:

#!/bin/sh

arp-scan -l --interface=enp2s0 | awk '{print $1}' | grep "\." | while read line;
   do
       nmap -Pn -sV "$line" > /tmp/scan/"$line".result
   done

Эти данные понадобятся мне для последующего анализа. Так как это довольно длительная операция я один раз собрал данные и теперь по собранным сведениям буду искать рабочие станции Linux с активным 22-ым портом:

#!/bin/sh

find /tmp/scan/*.result | while read line;
   do
   scan=`cat $line | grep "22/tcp"`
   if [ ! -z "$scan" ];
       then
               echo $line | awk -F".result" '{print $1}' | awk -F"/tmp/scan/" '{print $2}'
       fi
   done

Теперь мы можем сопоставить адреса записям в DHCP Leases и определить неучтенные рабочие станции (для мониторинга рабочих станций у меня используется Zabbix).

Аналогчино мы можем найти и Windows-рабочие станции и сервера.

#!/bin/sh

find /tmp/scan/*.result | while read line;
   do
   scan=`cat $line | grep "Windows"`
   if [ ! -z "$scan" ];
       then
               echo $line | awk -F".result" '{print $1}' | awk -F"/tmp/scan/" '{print $2}'
       fi
   done

Можно было конечно реализовать все это более красиво, но задача честно говоря одноразовая и терять день на разработку специализированного решения по крайней мере глупо.