Поиск устройства в локальной сети по mac адресу или имени клиента

Dasswa
Dasswa аватар
Offline
Зарегистрирован: 01.12.2019

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

Ситуация следующая, есть локальная сеть, ардуино и w5500, а так же некоторое устройсто доступ к которому необходимо получить удалённо. Необходимо узнать IP адрес этого устройства по средством самой ардуины. Адреса выдаёт DHCP. 

negavoid
Offline
Зарегистрирован: 09.07.2016

У w5500 есть доступ к MAC RAW (raw socket), используйте его и вручную отправьте запрос reverse arp.

Вот тут кой-какая помощь есть, хотя бы структуры уже описаны: https://sourceforge.net/p/minitcpstack/code/ci/master/tree/SRC/ARP.C

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Dasswa пишет:

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

Ситуация следующая, есть локальная сеть, ардуино и w5500, а так же некоторое устройсто доступ к которому необходимо получить удалённо. Необходимо узнать IP адрес этого устройства по средством самой ардуины. Адреса выдаёт DHCP. 

Любое устройство в локальной сети должно отвечать на arp запросы, иначе обмениваться данными используя ip протокол не получится.
Но не всегда на первый запрос получается получить ответ от устройства, например в локальной сети установлена ip-камера, мак-адрес мне известен, для поиска ip-адреса, отправляю arp запросы для поиска всех "живых" ip адресов подсети, не всегда на первый запрос от камеры получаю ответ.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

А не проще сделать резервирование IP-адреса за данным клиентом в настройках роутера? Тогда DHCP будет выдавать клиенту всегда один и тот же адрес.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Ethernet client умеет делать ресолв по dns, например.

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Jeka_M пишет:

А не проще сделать резервирование IP-адреса за данным клиентом в настройках роутера? Тогда DHCP будет выдавать клиенту всегда один и тот же адрес.

Не всегда есть такая возможность, провайдер выдал вам ethernet на десяток розеток, вы включаете свое оборудование и получаете адреса в аренду по dhcp. Тут arp и спасает.

Dasswa
Dasswa аватар
Offline
Зарегистрирован: 01.12.2019

Алексей. пишет:

Любое устройство в локальной сети должно отвечать на arp запросы, иначе обмениваться данными используя ip протокол не получится.

Но не всегда на первый запрос получается получить ответ от устройства, например в локальной сети установлена ip-камера, мак-адрес мне известен, для поиска ip-адреса, отправляю arp запросы для поиска всех "живых" ip адресов подсети, не всегда на первый запрос от камеры получаю ответ.

Можно подробнее о том как ты делаешь запрос. Облазила уже все форумы, не могу найти живых примеров. 

rkit
Offline
Зарегистрирован: 23.11.2016

Для решения таких задач разработан mdns.

Засыпать сеть arp-запросами - блажь, и не гарантирует результата, ибо существуют транслирующие мосты. Если уж сканировать, то просто udp-пакетами.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

пинг на широковещательный, затем arp -a  и парсить, может сработать, но не обязательно, в винде это отлючено

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Ошибкой было бы думать, что W5500+"ардуина" может справится со сколько-нибудь серьёзным потоком одновременно входящих icmp reply. Хотя, если открыть сразу восемь сокетов и ушами не хлопать... Но не факт, всё же.

Не меньшим заблуждением (а даже и большим) является уверенность в том, что, в задаче поиска хоста в сети, mDNS лучше какой-нибудь иной технологии и что-то кому-то гарантирует.

Пока "некое устройство в локальной сети" (и не факт, что в локальной, кстати) имеет форму сферического коня в вакууме, рецепты по его поиску равновероятно осмысленны либо бессмысленны.

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

sadman41 пишет:
Ошибкой было бы думать, что W5500+"ардуина" может справится со сколько-нибудь серьёзным потоком одновременно входящих icmp reply. Хотя, если открыть сразу восемь сокетов и ушами не хлопать... Но не факт, всё же.
Так и не требуется ничего кроме как определять какие ip адреса выданы другим модулям. Один только raw сокет и нужен, какие там сразу 8.

sadman41 пишет:
Не меньшим заблуждением (а даже и большим) является уверенность в том, что, в задаче поиска хоста в сети, mDNS лучше какой-нибудь иной технологии и что-то кому-то гарантирует.
Простой пример: облачная wifi камера, единственное, что можно настроить - это параметры соединения с точкой доступа и регистрация в облаке вендора.
Картинку смотреть можно через облако или в веб-морде камеры. Использует только 80-й порт для веб-морды и более никаких сервисов не предусмотрено, а на arp не отвечать не может по определению. С известным мак адресом на обычном ПК поиск адреса камеры занимает не более 3-х секунд на подсети из 255 адресов.
Использовал бы mdns для этой фигни, так нет его там.

Dasswa пишет:
Можно подробнее о том как ты делаешь запрос. Облазила уже все форумы, не могу найти живых примеров
Вам же в #1 дали ссылку как построить arp запрос и для передачи/приема использовать raw сокет.
Вы код готовый ждете для вашего чипа?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Алексей. пишет:

sadman41 пишет:
Ошибкой было бы думать, что W5500+"ардуина" может справится со сколько-нибудь серьёзным потоком одновременно входящих icmp reply. Хотя, если открыть сразу восемь сокетов и ушами не хлопать... Но не факт, всё же.
Так и не требуется ничего кроме как определять какие ip адреса выданы другим модулям. Один только raw сокет и нужен, какие там сразу 8.


ip raw и mac raw на уровне чипа не обрабатываются, этим должен заниматься МК. Между ним и сетевым модулем скорость на порядки меньше той, с которой потенциально прилетят ответы на мультикаст, если ориентироваться на такой способ. Так что однозначного ответа на вопрос "А сможем ли мы успеть выловить нужный" лично у меня нет.

В общем случае стоит заставить DHCP зарегистрировать арендовавший адрес хост в какой-либо зоне DNS, а дальше все разрулится стоковой библиотечной функцией.

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

sadman41 пишет:
ip raw и mac raw на уровне чипа не обрабатываются, этим должен заниматься МК. Между ним и сетевым модулем скорость на порядки меньше той, с которой потенциально прилетят ответы на мультикаст, если ориентироваться на такой способ. Так что однозначного ответа на вопрос "А сможем ли мы успеть выловить нужный" лично у меня нет. В общем случае стоит заставить DHCP зарегистрировать арендовавший адрес хост в какой-либо зоне DNS, а дальше все разрулится стоковой библиотечной функцией.
С этим нельзя не согласиться.
Представим лабораторную сеть, десятки, а то и сотни хостов. Из cетевой карты постоянно что-то сыпется.
Учитывая не самую высокую производительность ардуино, перебор адресов для подсети может оказаться вечностью (далеко не с первого раза устройство может ответить на arp запрос и этот ответ мы можем проспать).
В этом случае имеет смысл на устройствах, для которых выполняется поиск, реализовать минимальную обработку мультикастов получаемых из локальной сети.

Если же есть возможность на устройствах использовать mdns или какие либо другие аналоги, то поиск устройств значительно упрощается.
Пример использования:
В домофонной системе есть множество вызывных панелей, это панель на входной уличной двери и квартирные панели, все находятся в одной сети, каждая панель это sip звонилка сама и клиент и сервер, никаких посредников в минимальной конфигурации на требуется.
Из всех настроек - это номер квартиры, для уличной панели - номер подъезда/парадного.
Для выполнения вызова (вызывающий пока не знает ip адреса вызываемого), вызывающий отправляет мультикаст на группу указывая в запросе номер квартиры которую он ищет, если панель с настроенным номером этой квартиры включена, она откликается (отвечает на этот мультикаст юникастом) и вызывающий уже пытается совершить вызов на определенный ip адрес.
В отличии от arp, ответы на мультикасты почти всегда приходят с первого раза.