winapi — Fing-подобное сканирование сети Переполнение стека

Мы работаем над функцией сканирования сети, аналогичной Fing. Нам нужно обнаружить сетевые устройства, доступные в локальной сети, и получить их IP и MAC-адреса.
Наша текущая реализация основана на мониторинге ARP-таблиц. Таким образом, мы просто получаем таблицу ARP каждый фиксированный промежуток времени, а затем сравниваем текущую таблицу ARP с предыдущей, чтобы найти добавленные и удаленные устройства. Этот метод работает, но он не идеален, поскольку может быть большая задержка между моментом, когда устройство подключено к локальной сети, и моментом обновления таблицы ARP.

Поэтому мы хотели бы улучшить текущую реализацию. Наша идея — получить диапазон IP-адресов локальной сети (мы знаем маску подсети), а затем мы можем использовать SendARP () для каждого IP-адреса диапазона. Это обновит таблицу ARP, чтобы мы могли продолжать использовать оригинальный метод. И это должно работать нормально для сетей IPv4. Но что нам делать с сетями IPv6?

На самом деле у нас есть несколько идей для сканирования IPv6, но мы не уверены, поэтому ваша помощь, ребята, будет по достоинству оценена:

  1. Мы можем пропинговать адрес ff02 :: 1. Теоретически устройства IPv6 должны отвечать, когда мы пропингуем этот широковещательный адрес, но похоже, что это будет зависеть от настроек устройства. И я не уверен, что это приведет к обновлению таблицы Windows ARP.
  2. Попробуйте использовать протокол сетевого обнаружения, который выглядит как альтернатива ARP для IPv4. Но я не смог найти API для Windows, который бы позволял легко использовать NDP.

Итак, мои вопросы:

  1. Будет ли SendArp () работать нормально, если мы будем использовать его, как описано выше?
  2. Есть ли способ принудительно обновить таблицу ARP в сетях IPv6?

Заранее спасибо,

Виталий

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …