Передача и получение данных 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 стеков, если я не ошибаюсь).

Другие вопросы по тегам