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

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


    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-адресам. Для недавних записей в журнале можно считать, что эти устройства обнаружены.
    • ARPWatch (предложено alexanster, описано TaHKucT)
      Arpwatch отслеживает пары IP-адрес — MAC-адрес, записывая в лог новые, пропавшие и изменившиеся пары. Устройства, попавшие в лог, можно считать обнаруженными.
    • Анализ FDB-таблиц коммутаторов(предложено mickvav)
      FDB-таблицы (Forwarding DataBase) управляемых коммутаторов содержат данные о коммутации MAC-адресов абонентов и устройств, т.е. соответствии MAC-адрес устройства — порт коммутатора.

      Данные доступны по SNMP и telnet, и могут быть использованы при построении физической карты сети.

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


    После того, как устройство обнаружено, можно переходить к сбору сведений о нем.
    Используя 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

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

    • SNMP
      Протокол SNMP почти всегда поддерживаем маршрутизаторами и коммутаторами; имеется в Windows (соответствующая служба по умолчанию отключена); для Linux требуется установка демона snmpd. По всей видимости последняя третья версия достаточно сложна в реализации, поэтому предыдущая версия 2с до сих пор актуальна, хотя и не рекомендуема из-за отсутсвия шифрования при передаче данных. Протолок работает на 161 UDP-порту устройства.

      Для работы с SNMP можно использовать пакет утилит Net-SNMP. Чтобы получить, к примеру, описание устройства, надо указать версию протокола, пароль на чтение (community read, по умолчанию public) и адрес, в нотации SNMP называемый OID (object identificator) и состоящий из чисел и точек. Все адреса устройства можно представить в виде дерева, где адреса отсортированы в лексикографическом порядке. Протокол позволяет запросить текущее значение по адресу, а также адреса следующие за текущим.

      Получение описания устройства при помощи snmpget
      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 имеют типовые адреса для сетевых интерфейсов и загруженности процессоров/памяти, поэтому для них лишь знать (или уметь определить) используемую операционную систему.

      Получение описания дисков Linux при помощи snmpwalk
      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
      Получение описания дисков Windows при помощи snmpwalk
      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
    • WMI
      Технология WMI — это расширенная и адаптированная под Windows реализация стандарта WBEM, позволяющая удаленно не только считывать параметры, но и управлять устройством. WMI работает поверх RPC (TCP порт 135) и DCOM (на произвольном TCP порту выше 1024), активно используется в скриптах Power Shell (ранее Windows Script Host).

      Данные можно запрашивать, разумеется, только с Windows машин.

      Получение информации об оперативной памяти в PowerShell
      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 и ее Linux-порт

      Получение производителя устройства при помощи wmic
      wmic /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 по SSH
      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


    Как известно 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), которые могут быть запрошены, и поэтому легко можно реализовать, например, обнаружение файлов и отслеживание их размера в заданной папке. Подробнее здесь.

    Заключение


    Как видно всё достаточно просто и никакой магии нет. Если вы знаете еще какие-либо способы обнаружения устройств или получения их свойств, то просьба сообщить о них.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 12

      0
      ...TCP-порту

      ААААА!!! И тут порты!

      gramota.ru/slovari/dic/?word=порт&all=x
        0
        Обложка статьи — зачёт!
        Порадовало, что есть разбор технологий Windows и Linux в одном месте. Позволило сравнить сложность настройки.
          0
          А сбор сведений через IPMI и XML?
            0
            Что значит сбор по XML? IMPI упомянут.
            0
            Если есть доступ, можно заглянуть в логи DHCP сервера на предмет выданных лиз.
            Или просто снифить сетку, что-нибудь типа ARPWatch.
              0
              Спасибо, надо будет добавить способ. Насколько я понимаю, то устройства со статичным ip в лог не попадут. Правильно?
                0

                Нет, не правильно. Arpwatch отслеживает связи "соответствие IP адреса мак-адресу" и в логи пишется "все новые пары, все пропавшие пары и изменившиеся пары". Кто, как и кому назначает ip адреса arpwatch не знает, его интересует только пара "ip-mac" в пакете, дошедшем до него.


                Кстати раз пошла такая пьянка: arpwatch нужно или в условном центре сети ставить, или сливать на него копию трафика, если его поставить где то "в углу сети на сервере который ничего не делает" то его показатели будут мягко говоря "не самыми актуальными"


                ЗЫ: а статья эта, она о чем вообще? Прочитать — прочитал, а что и кому хотел сказать автор так и не понял

                  0
                  Ну вообще-то я имел в виду логи DHCP сервера и прослушивание сетки как два разных независимых способа.
                  Насколько я понимаю, то устройства со статичным ip в лог не попадут. Правильно?
                  Да, именно так.
              0
              это контора написала или человек? сколько это лет все работает я даже боюсь представить.
                0
                Да какая там контора…
                0
                С некоторых коммутаторов можно ещё снять fdb-таблицу — какие маки на каких портах видно. Тогда даже прикрывшихся фаерволом от любых входящих соединений видно (с точностю до мака). А если и с роутеров снимать arp — то и IP-ники легко вычисляются.
                  0
                  + за коммутаторы.

                Only users with full accounts can post comments. Log in, please.