Обнаружение сетевых устройств

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


Disclaimer
Автор не имеет профильного образования, связанного с администрированием сетей, поэтому наверняка имеются неточности и упомянуто не всё, что можно.

Обнаружение


Для обнаружения устройства, т.е. определения есть ли на выбранном ip-адресе что-либо, можно применить следующие методы:


Сбор сведений


После того, как устройство обнаружено, можно переходить к сбору сведений о нем.
Используя ARP протокол, по ip можно получить MAC-адрес, а по нему вероятного производителя (часть оборудования допускает смену адреса, так что метод не очень надежен). Далее можно воспользоваться утилитой nmap, которая сканируя открытые порты, сверяется со своей базой отпечатков и делает предположение об используемой операционной системе, её версии и типе устройства.

Получение типа устройства и используемой ОС при помощи nmap
nmap -O -v 192.168.0.1

Starting Nmap 7.60 ( https://nmap.org ) at 2018-03-04 01:17 RTZ 2 (ceia)
Initiating ARP Ping Scan at 01:17
Scanning 192.168.0.1 [1 port]
Completed ARP Ping Scan at 01:17, 0.70s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 01:17
Completed Parallel DNS resolution of 1 host. at 01:17, 0.00s elapsed
Initiating SYN Stealth Scan at 01:17
Scanning 192.168.0.1 [1000 ports]
Discovered open port 80/tcp on 192.168.0.1
Discovered open port 49152/tcp on 192.168.0.1
Discovered open port 1900/tcp on 192.168.0.1
Completed SYN Stealth Scan at 01:17, 0.13s elapsed (1000 total ports)
Initiating OS detection (try #1) against 192.168.0.1
Retrying OS detection (try #2) against 192.168.0.1
WARNING: OS didn't match until try #2
Nmap scan report for 192.168.0.1
Host is up (0.00s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
80/tcp    open  http
1900/tcp  open  upnp
49152/tcp open  unknown
MAC Address: A0:F3:C1:35:21:58 (Tp-link Technologies)
Device type: WAP
Running: Linux 2.4.X
OS CPE: cpe:/o:linux:linux_kernel:2.4.36
OS details: DD-WRT v24-sp1 (Linux 2.4.36)
Network Distance: 1 hop

Чтобы получить более подробные сведения по устройству потребуется один из следующих способов:


Как это работает на примере Zabbix


Как известно Zabbix может самостоятельно обнаруживать новые устройства в сети и автоматически опрашивать некоторые их параметры. Называется это — Low Level Discovery.

Обнаружение устройств задается правилами сетевого обнаружения, которые комбинируют перечисленные ранее методы обнаружения, определяют доступно ли устройство и какой шаблон к нему применить (обычно исследуется описание устройства). Шаблон содержит список свойств, которые можно получить с устройства, а также правила для обнаружения и создания новых, выполняемые по таймеру.

В случае с SNMP такое правило может выглядеть примерно так: перебрать все дочерние элементы узла 1.3.6.1.2.1.2.2.1.8 (правило обнаружения) и для каждого найденного элемента (число, помещаемое в {#SNMPINDEX}) добавить новые метрики, задаваемые через прототипы элементов данных, 1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX} и 1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX}, если их еще нет. Подробнее здесь.

В случае агента правило будет выглядеть немного иначе: запросить у агента одно из discovery-свойств, к примеру system.cpu.discovery, получить список процессоров в виде json

[
	{"NUMBER": 0, "STATUS": "online"},
	{"NUMBER": 1, "STATUS": "online"}
] 

и для каждого элемента добавить system.cpu.load[{#CPU.NUMBER}], если такой метрики еще нет. Стоит отметить, что Zabbix-агент позволяет создавать свои элементы (UserParameter), которые могут быть запрошены, и поэтому легко можно реализовать, например, обнаружение файлов и отслеживание их размера в заданной папке. Подробнее здесь.

Заключение


Как видно всё достаточно просто и никакой магии нет. Если вы знаете еще какие-либо способы обнаружения устройств или получения их свойств, то просьба сообщить о них.
@little-brother
07.03.2018 16:32 UTC
Первоисточник