Disclaimer
Автор не имеет профильного образования, связанного с администрированием сетей, поэтому наверняка имеются неточности и упомянуто не всё, что можно.
Обнаружение
Для обнаружения устройства, т.е. определения есть ли на выбранном ip-адресе что-либо, можно применить следующие методы:
- ping сканирование
Как ни странно, это самый простой и распространенный способ.
- Проверка открытых TCP-портов
Если на устройстве отключен ответ на ping, то можно попробовать установить соединение по какому-либо TCP-порту. В виду того, что портов много и проверка каждого занимает значительное время, обычно проверяются только самые распространенные, напр. 80 или 443, используемые для веб-интерфейса устройства. - Проверка работы UDP служб
UDP протокол не отправляет подтверждения о получении запроса и поэтому в общем виде сканирование UDP-портов невозможно. Однако можно попробовать опросить службы, прослушивающие UDP-порт и отправляющие ответ на запрос, напр. SNMP (порт 161) или IPMI (порт 623). В случае, если получен ответ, отличный от таймаута, то устройство обнаружено. - ARP сканирование
Помимо обычных ICMP запросов, которые используют утилиты ping, для устройств в том же широковещательном L2-домене можно воспользоваться более быстрым arping: по диапазону ip-адресов рассылаются широковещательные ARP пакеты вида «компьютер с IP-адресом XXX, сообщите свой MAC-адрес компьютеру с МАС-адресом запросившего», и если ответ получен, то устройство считается обнаруженным. - CDP/LLDP
Если в сети используется протокол LLDP (или аналог CDP), то устройства могут собирать сведения о своих соседях, которые можно считать обнаруженными. Эти данные доступны по SNMP.
Отмечу, что информация о соседях совместно с результатамиtraceroute
может служить основой для построения физической карты сети. - NetBIOS сканирование
Протокол NetBIOS может быть использован для поиска Windows-машин, например при помощи утилитыnbtscan
. - Журналы DHCP (предложено alexanster)
В журналах DHCP-серверов есть информация о выдачи ip-адресов по MAC-адресам. Для недавних записей в журнале можно считать, что эти устройства обнаружены.
Сбор сведений
После того, как устройство обнаружено, можно переходить к сбору сведений о нем.
Используя ARP протокол, по ip можно получить MAC-адрес, а по нему вероятного производителя (часть оборудования допускает смену адреса, так что метод не очень надежен). Далее можно воспользоваться утилитой 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
Чтобы получить более подробные сведения по устройству потребуется один из следующих способов:
- SNMP
Протокол SNMP почти всегда поддерживаем маршрутизаторами и коммутаторами; имеется в Windows (соответствующая служба по умолчанию отключена); для Linux требуется установка демона snmpd. По всей видимости последняя третья версия достаточно сложна в реализации, поэтому предыдущая версия 2с до сих пор актуальна, хотя и не рекомендуема из-за отсутсвия шифрования при передаче данных. Протолок работает на 161 UDP-порту устройства.
Для работы с SNMP можно использовать пакет утилит Net-SNMP. Чтобы получить, к примеру, описание устройства, надо указать версию протокола, пароль на чтение (community read, по умолчанию public) и адрес, в нотации SNMP называемый OID (object identificator) и состоящий из чисел и точек. Все адреса устройства можно представить в виде дерева, где адреса отсортированы в лексикографическом порядке. Протокол позволяет запросить текущее значение по адресу, а также адреса следующие за текущим.
Получение описания устройства при помощи snmpgetsnmpget -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 имеют типовые адреса для сетевых интерфейсов и загруженности процессоров/памяти, поэтому для них лишь знать (или уметь определить) используемую операционную систему.
Получение описания дисков Linux при помощи snmpwalksnmpwalk -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
Получение описания дисков Windows при помощи snmpwalksnmpwalk -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
- WMI
Технология WMI — это расширенная и адаптированная под Windows реализация стандарта WBEM, позволяющая удаленно не только считывать параметры, но и управлять устройством. WMI работает поверх RPC (TCP порт 135) и DCOM (на произвольном TCP порту выше 1024), активно используется в скриптах Power Shell (ранее Windows Script Host).
Данные можно запрашивать, разумеется, только с Windows машин.
Получение информации об оперативной памяти в PowerShellGet-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 и ее Linux-порт
Получение производителя устройства при помощи wmicwmic /USER:admin /PASSWORD:mypassword /NODE:"192.168.0.100" computersystem get Manufacturer Manufacturer Gigabyte Technology Co., Ltd.
- Агент системы мониторинга, напр. Zabbix или Check_MK
Если имеется возможность, то на устройстве устанавливается небольшая программа, работающая в фоне и собирающая данные. Преимущество использования агентов в том, что получение данных унифицировано вне зависимости от используемого устройством оборудования и операционной системы, а также возможно собирать данные доступные только локально (к примеру результат работы консольной программы). - SSH
Исходно данные по SSH можно получать с Linux и iOS устройств. Для Windows и Android потребуется установка SSH-сервера.
Получение информации о CPU в SSHcat /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
Как известно 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
), которые могут быть запрошены, и поэтому легко можно реализовать, например, обнаружение файлов и отслеживание их размера в заданной папке. Подробнее здесь.Заключение
Как видно всё достаточно просто и никакой магии нет. Если вы знаете еще какие-либо способы обнаружения устройств или получения их свойств, то просьба сообщить о них.
Комментарии (9)
valerylinkov
08.03.2018 16:10Обложка статьи — зачёт!
Порадовало, что есть разбор технологий Windows и Linux в одном месте. Позволило сравнить сложность настройки.
alexanster
08.03.2018 16:10Если есть доступ, можно заглянуть в логи DHCP сервера на предмет выданных лиз.
Или просто снифить сетку, что-нибудь типа ARPWatch.little-brother Автор
08.03.2018 16:19Спасибо, надо будет добавить способ. Насколько я понимаю, то устройства со статичным ip в лог не попадут. Правильно?
TaHKucT
10.03.2018 01:33Нет, не правильно. Arpwatch отслеживает связи "соответствие IP адреса мак-адресу" и в логи пишется "все новые пары, все пропавшие пары и изменившиеся пары". Кто, как и кому назначает ip адреса arpwatch не знает, его интересует только пара "ip-mac" в пакете, дошедшем до него.
Кстати раз пошла такая пьянка: arpwatch нужно или в условном центре сети ставить, или сливать на него копию трафика, если его поставить где то "в углу сети на сервере который ничего не делает" то его показатели будут мягко говоря "не самыми актуальными"
ЗЫ: а статья эта, она о чем вообще? Прочитать — прочитал, а что и кому хотел сказать автор так и не понял
rst16
08.03.2018 16:10это контора написала или человек? сколько это лет все работает я даже боюсь представить.
corax
ААААА!!! И тут порты!
gramota.ru/slovari/dic/?word=порт&all=x