Назад | Перейти на главную страницу

Протокол (или публикация / обнаружение службы) для обнаружения устройств в сети

подключаем несколько встроенных устройств в сеть. Сейчас я ищу способ найти IP-адреса устройств и идентифицировать их. Мы работаем с ПК с Windows, и я собираюсь написать инструмент на C #, который должен это сделать.

  1. Я думал об отправке широковещательной передачи udp и в подтверждении, то есть ip устройства, что означало бы, что устройству требуется запуск демона для назначения самого ip.

  2. Запуск службы (например, принтера) на устройстве, а на ПК просто поиск службы.
    Я читал о некоторых вещах, таких как apipa, zeroconf, ipv4 local link, bonjour, dns-sd, mdns, bonjour; Они могут автоматически назначать IP-адреса и публиковать услуги в сети.

Мой вопрос: может ли кто-нибудь порекомендовать мне то, что подойдет для моей задачи? -Протокол или служба должны иметь низкий уровень использования ресурсов (памяти / ЦП).
-Есть ли стандартные протоколы для использования?
- DNS - хорошая идея или это будет использование ресурсов только для нахождения IP-адреса устройства?
-Также должен работать, когда поблизости нет серверов DHCP.

edit: Чтобы немного уточнить: IP-конфигурация автоматическая. Проблема в том, как указать ПК, какой IP-адрес в сети (или прямое соединение в этой вазе будет только один) принадлежит устройству (идентичности).

Мой вопрос: может ли кто-нибудь порекомендовать мне то, что подойдет для моей задачи? -Протокол или служба должны иметь низкий уровень использования ресурсов (памяти / ЦП). -Есть ли стандартные протоколы для использования?

Стандартный способ обнаружения устройств (и их атрибутов, таких как IP-адрес управления) в сети Ethernet - использовать LLDP.

Вы можете найти список демонов lldp Вот

Все хосты в локальной сети Vlan будут видеть объявления LLDP, поскольку они отправляются на многоадресный MAC-адрес; это также означает, что объявления LLDP привязаны к Vlan. Если вам нужен реестр устройств и обнаружение через Vlan, вам нужно будет создать свой собственный протокол объявления IP ... UDP будет хорошим выбором для транспорта.

Является ли DNS хорошей идеей или это будет использование ресурсов только для нахождения IP-адреса устройства?

Если вы ищете только IP-адрес и вам все равно, можете ли вы определить, является ли устройство одной из ваших встроенных систем, вы можете использовать mDNS; однако это более рискованно, поскольку у вас нет гарантии от конфликтов пространства имен в локальной сети клиента.

Каким образом встроенные системы OP должны получить адрес IPv4, если у клиента нет DHCP-сервера?

RFC 3330 выделяет 169.254.0.0/16 для связи по одному каналу, если DHCP-сервер недоступен. Поразмыслив, это, вероятно, самый безопасный блок адресов для использования; однако ваша компания должна поощрять своих клиентов выделять адреса с помощью DHCP вместо некоторой формы автоконфигурации в подсети 169.254.0.0/16.

Как вы назначаете индивидуальные IP-адреса в пределах 169.254.0.0/16 - это вопрос, который мы не можем решить за вас ... несколько возможностей:

  • Назначьте конкретные адреса в пределах 169.254.0.0/16 путем хеширования значений вашего mac-адреса, чтобы исключить коллизии для ожидаемого максимального количества ваших систем в vlan любого клиента.
  • Прослушайте несколько интервалов приветствия LLDP вашей системы и выделите адрес из 169.254.0.0/16, который еще не использовался

Утилита nmap очень хорошо определяет, какие IP-адреса в сети (по вашему выбору!) Заняты. Если хост ответит на любой запрос о проверке его присутствия, Nmap покажет это.

В противном случае вы можете повозиться с ARP. Есть несколько утилит для всех основных ОС, которые это делают (в Win32 ищите Cain, в Linux их много). Эти утилиты будут отправлять широковещательный ARP-запрос / «пинг» на каждый адрес, спрашивая, подключено ли устройство, и если да, то какой у него IP.