Как изменить исходящий UDP-трафик с помощью Winsock LSP?

Я создаю приложение, которое должно динамически изменять пакеты DHCPv6, прежде чем они подключатся. Я работаю в частной собственности с опциями поставщика DHCPv6, и мне нужна возможность проверять и изменять эти опции в памяти перед их передачей.

Я построил многоуровневый сервис-провайдер на основе Winsock, изменив образец кода Microsoft. Он перехватывает исходящие HTTP-пакеты, изменяет агент-реферер на что-то смешное и отправляет пакет в путь. Проверено в Wireshark, отлично работает.

Также было легко изменить код моего установщика так, чтобы мой LSP был подключен поверх UDP / IPv6, а не TCP / IPv4, и теперь, с подключенным отладчиком, я могу видеть, что я получаю обратные вызовы со стеками, ведущими на сервер DHCP. Однако я больше не вижу буферов в памяти.

WSPSend а также WSPConnect не вызывать, так как мы находимся на протоколе без установления соединения — это имеет смысл. Я получаю последовательный обратный вызов в WSPSendTo но lpBuffers член, который в моем прототипе HTTP содержал буфер, представляющий исходящий пакет, является NULL,

Я иду по этому пути совершенно неправильно, или мне нужно переопределить другую операцию Winsock? Я был бы рад пойти в другом направлении, если LSP — неправильный путь, но сторонние библиотеки — очень трудная задача для этого приложения — в противном случае, я бы посмотрел на Winpcap.

РЕДАКТИРОВАТЬ: Вау, это было давно. Для тех, кто пришел за мной, это в конечном итоге сработало. Мне стыдно сказать, что проблема была в том, что я компилировал с оптимизациями, которые мешали мне видеть правильные данные в отладчике. Когда я перестал быть ленивым и выбросил байты в файл, я увидел, что все хорошо.

2

Решение

LSP может только перехватывать трафик Winsock, DHCP находится на более низком уровне, для этого вам нужна другая технология, например: NDIS, TDI (не будет работать на Win8) или WFP (не будет работать на XP)

0

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

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

По вопросам рекламы [email protected]