- PVSM.RU - https://www.pvsm.ru -
Сканирование сети с построением списка устройств и их свойств, таких как перечень сетевых интерфейсов, с последующим снятием данных в системах мониторинга, если не вникать в происходящее, может показаться особой, компьютерной, магией. Как же это работает — под катом.
Disclaimer
Автор не имеет профильного образования, связанного с администрированием сетей, поэтому наверняка имеются неточности и упомянуто не всё, что можно.
Для обнаружения устройства, т.е. определения есть ли на выбранном ip-адресе что-либо, можно применить следующие методы:
Отмечу, что информация о соседях совместно с результатами traceroute
может служить основой для построения физической карты сети.
nbtscan
.
После того, как устройство обнаружено, можно переходить к сбору сведений о нем.
Используя ARP протокол, по ip можно получить MAC-адрес, а по нему вероятного производителя (часть оборудования допускает смену адреса, так что метод не очень надежен). Далее можно воспользоваться утилитой nmap [8], которая сканируя открытые порты, сверяется со своей базой отпечатков и делает предположение [9] об используемой операционной системе, её версии и типе устройства.
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
Чтобы получить более подробные сведения по устройству потребуется один из следующих способов:
Для работы с SNMP можно использовать пакет утилит Net-SNMP [10]. Чтобы получить, к примеру, описание устройства, надо указать версию протокола, пароль на чтение (community read, по умолчанию public) и адрес, в нотации SNMP называемый OID (object identificator) и состоящий из чисел и точек. Все адреса устройства можно представить в виде дерева, где адреса отсортированы в лексикографическом порядке. Протокол позволяет запросить текущее значение по адресу, а также адреса следующие за текущим.
snmpget -v 2c -c public 192.168.0.102 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux debian 3.16.0-4-586 #1 Debian 3.16.43-2+deb8u2 (2017-06-26) i686
Стандартный набор адресов весьма ограничен и содержит описание устройства, контакты, расположение и время работы (uptime). Остальные адреса зависят от производителя устройства и могут быть получены сканированием, например, утилитой snmpwalk. К счастью, Linux и Windows имеют типовые адреса для сетевых интерфейсов и загруженности процессоров/памяти, поэтому для них лишь знать (или уметь определить) используемую операционную систему.
snmpwalk -v 2c -c public 192.168.0.102 1.3.6.1.4.1.2021.9.1.2
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskPath.2 = STRING: /var
UCD-SNMP-MIB::dskPath.3 = STRING: /
UCD-SNMP-MIB::dskPath.4 = STRING: /run
UCD-SNMP-MIB::dskPath.5 = STRING: /dev/shm
UCD-SNMP-MIB::dskPath.6 = STRING: /run/lock
UCD-SNMP-MIB::dskPath.7 = STRING: /sys/fs/cgroup
snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.25.2.3.1.3
HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: C: Label: Serial Number a65ceb77
HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: D: Label: Serial Number ded9f83e
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: E: Label: Serial Number 8e764a1
HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: I:
HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: Virtual Memory
HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Physical Memory
Данные можно запрашивать, разумеется, только с Windows машин.
Get-WmiObject win32_OperatingSystem |%{"Total Physical Memory: {0}KB`nFree Physical Memory : {1}KB`nTotal Virtual Memory : {2}KB`nFree Virtual Memory : {3}KB" -f $_.totalvisiblememorysize, $_.freephysicalmemory, $_.totalvirtualmemorysize, $_.freevirtualmemory}
Total Physical Memory: 2882040KB
Free Physical Memory : 612912KB
Total Virtual Memory : 5762364KB
Free Virtual Memory : 1778140KB
Также имеется консольная утилита wmic [16] и ее Linux-порт [17]
wmic /USER:admin /PASSWORD:mypassword /NODE:"192.168.0.100" computersystem get Manufacturer
Manufacturer
Gigabyte Technology Co., Ltd.
cat /proc/cpuinfo
processor : 0
Processor : AArch64 Processor rev 4 (aarch64)
Hardware : sun50iw1p1
BogoMIPS : 48.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 1
...
Как известно Zabbix [20] может самостоятельно обнаруживать новые устройства в сети и автоматически опрашивать некоторые их параметры. Называется это — Low Level Discovery [21].
Обнаружение устройств задается правилами сетевого обнаружения [22], которые комбинируют перечисленные ранее методы обнаружения, определяют доступно ли устройство и какой шаблон к нему применить (обычно исследуется описание устройства). Шаблон содержит список свойств, которые можно получить с устройства, а также правила для обнаружения и создания новых, выполняемые по таймеру.
В случае с SNMP такое правило может выглядеть примерно так: перебрать все дочерние элементы узла здесь [23].
В случае агента правило будет выглядеть немного иначе: запросить у агента одно из discovery-свойств, к примеру system.cpu.discovery
, получить список процессоров в виде json
[
{"NUMBER": 0, "STATUS": "online"},
{"NUMBER": 1, "STATUS": "online"}
]
и для каждого элемента добавить system.cpu.load[{#CPU.NUMBER}]
, если такой метрики еще нет. Стоит отметить, что Zabbix-агент позволяет создавать свои элементы (UserParameter
), которые могут быть запрошены, и поэтому легко можно реализовать, например, обнаружение файлов и отслеживание их размера в заданной папке. Подробнее здесь [24].
Как видно всё достаточно просто и никакой магии нет. Если вы знаете еще какие-либо способы обнаружения устройств или получения их свойств, то просьба сообщить о них.
Автор: little-brother
Источник [25]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/zabbix/274744
Ссылки в тексте:
[1] SNMP: https://ru.wikipedia.org/wiki/SNMP
[2] IPMI: https://ru.wikipedia.org/wiki/Intelligent_Platform_Management_Interface
[3] ICMP: https://ru.wikipedia.org/wiki/ICMP
[4] arping: https://ru.wikipedia.org/wiki/Arping
[5] ARP: https://ru.wikipedia.org/wiki/ARP
[6] LLDP: https://ru.wikipedia.org/wiki/LLDP
[7] NetBIOS: https://ru.wikipedia.org/wiki/NetBIOS
[8] nmap: https://ru.wikipedia.org/wiki/Nmap
[9] делает предположение: https://nmap.org/man/ru/man-os-detection.html
[10] Net-SNMP: http://www.net-snmp.org/
[11] WMI: https://ru.wikipedia.org/wiki/WMI
[12] WBEM: https://en.wikipedia.org/wiki/Web-Based_Enterprise_Management
[13] RPC: https://ru.wikipedia.org/wiki/%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80
[14] DCOM: https://ru.wikipedia.org/wiki/DCOM
[15] Power Shell: https://ru.wikipedia.org/wiki/Windows_PowerShell
[16] wmic: https://blogs.technet.microsoft.com/askperf/2012/02/17/useful-wmic-queries/
[17] Linux-порт: https://www.krenger.ch/blog/wmi-commands-from-linux/
[18] SSH: https://ru.wikipedia.org/wiki/SSH
[19] гипервизор: https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D0%B7%D0%BE%D1%80
[20] Zabbix: https://ru.wikipedia.org/wiki/Zabbix
[21] Low Level Discovery: https://www.zabbix.com/documentation/4.0/ru/manual/discovery/low_level_discovery
[22] правилами сетевого обнаружения: https://www.zabbix.com/documentation/4.0/ru/manual/discovery/network_discovery/rule
[23] здесь: https://habrahabr.ru/company/zabbix/blog/193460/
[24] здесь: https://habrahabr.ru/post/194980/
[25] Источник: https://habrahabr.ru/post/350394/?utm_campaign=350394
Нажмите здесь для печати.