Передача и получение данных ARP в Windows из программ пользовательского режима
(ARP = Протокол разрешения адресов - RFC 826) Есть ли способ отправлять и получать трафик ARP в Windows через пользовательские программы? В Linux мы можем просто создавать необработанные сокеты для отправки ARP-трафика, но в Windows мое исследование показывает, что нам нужно написать драйвер, который можно использовать для отправки такого трафика. Я думал об использовании WinPcap, но он внутренне устанавливает драйвер, который можно использовать для отправки / получения такого трафика.
Мой вопрос: без установки драйвера, есть ли способы, которыми Windows разрешит передачу / прием пакетов ARP?
1 ответ
Самый простой способ отправить пакет ARP - это использовать SendARP
,
Вы можете, затем использовать GetIpNetTable
получить адрес из таблицы ARP стека IP. Чтобы убедиться, что вы получаете текущий адрес, вы обычно хотите сделать DeleteIpNetEntry
удалить адрес, затем SendARP
затем подожди немного и GetIpNetTable
(при необходимости повторите несколько раз, пока не получите один с записью для нужного адреса).
В качестве альтернативы, для Vista или новее, вы можете использовать ResolveIpNetEntry2
чтобы получить данные немного более напрямую. Это автоматически сбрасывает текущую запись (если есть) для адреса, отправляет пакет ARP и возвращает текущий результат (который также используется для обновления таблицы ARP стеков, если я не ошибаюсь).