Как сканировать сеть, чтобы найти конкретное периферийное устройство

Я создаю небольшие электронные модули для домашней автоматизации на базе чипов Arduino с подключением к Ethernet. Я попытаюсь заставить их получить IP-адрес с DHCP, если это возможно, но я также хочу создать приложение C# для настройки этих модулей, и я хотел бы, чтобы мое программное обеспечение сканировало сеть для автоматического обнаружения моих модулей, как например, драйвер принтера HP может автоматически определять принтеры в сети.

Я подумал о:

  1. получение IP-адреса и маски компьютера для определения набора IP-адресов
  2. затем многопоточные пинги или HTTP-запросы к каждому IP-адресу набора
  3. проверить ответы и получить mac-адреса
  4. посмотреть, соответствует ли mac-адрес моему набору
  5. сделать конкретный http-запрос, чтобы получить «модель» модуля, и знать, как с ним взаимодействовать

Является ли этот алгоритм правдоподобным или кто-нибудь знает более эффективный способ? Как широковещательные запросы на широковещательный адрес и посмотрите, что вернется? Любые образцы или идеи?


person Sierramike    schedule 03.02.2015    source источник


Ответы (2)


Вполне правдоподобно. Прямой низкоуровневый доступ для отправки arp-запросов и получения arp-таблицы немного сложнее, но здесь на сайте есть несколько вопросов. Имейте в виду, что устройству не обязательно отвечать на эхо-запрос, чтобы иметь возможность работать в сети. Проверьте документацию на чипы, которые вы используете.

person Thomas Roes    schedule 03.02.2015

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

person DoronG    schedule 05.02.2015