C/С++ Linux, Как найти соседей в сети Без использования IP (только для MAC)

В небольшой сети, скажем, 20 узлов или меньше, моя программа на тестовом инструменте должна знать "Кто там?" по MAC не по IP. Я буду подключаться к случайным сетям и должен быть в состоянии сделать это, не зная, какие адреса, MAC или нет в сети, и зная, что я не могу полагаться на DHCP. Вполне разумно, что сервер DHCP может быть недоступен, а узлы не имеют IP-адресов и/или, я не могу его получить. Честно говоря, мне не нужен IP, наш тестовый протокол - это уровень MAC, а не IP.

Итак, как я могу определить MAC-адреса соседа моего прибора? Это звучит так же, как LLDP, но в обратном направлении, то есть "кто там", а не "Я здесь, и я могу это сделать...". Я должен предположить, что для конечных точек не назначено IP, поэтому нет ARPing, NMAP и т.д.

Примечание. Я должен добавить, что это проводная сеть.

Ответ 1

В общем случае нет протокола уровня MAC, который вы можете отправить и гарантировать ответ от каждого компьютера в вашей сети (я предполагаю, что вы используете ethernet здесь, поскольку я считаю, что в WLAN все по-другому). IE не существует широковещательной (или даже одноадресной передачи IIRC) на уровне MAC, на которую гарантированно будет отвечать хост. С IP-адресом вы можете транслировать IP-адрес и проверять кеш ARP.

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