Я создаю приложение, которое должно динамически изменять пакеты DHCPv6, прежде чем они подключатся. Я работаю в частной собственности с опциями поставщика DHCPv6, и мне нужна возможность проверять и изменять эти опции в памяти перед их передачей.
Я построил многоуровневый сервис-провайдер на основе Winsock, изменив образец кода Microsoft. Он перехватывает исходящие HTTP-пакеты, изменяет агент-реферер на что-то смешное и отправляет пакет в путь. Проверено в Wireshark, отлично работает.
Также было легко изменить код моего установщика так, чтобы мой LSP был подключен поверх UDP / IPv6, а не TCP / IPv4, и теперь, с подключенным отладчиком, я могу видеть, что я получаю обратные вызовы со стеками, ведущими на сервер DHCP. Однако я больше не вижу буферов в памяти.
WSPSend
а также WSPConnect
не вызывать, так как мы находимся на протоколе без установления соединения — это имеет смысл. Я получаю последовательный обратный вызов в WSPSendTo
но lpBuffers
член, который в моем прототипе HTTP содержал буфер, представляющий исходящий пакет, является NULL
,
Я иду по этому пути совершенно неправильно, или мне нужно переопределить другую операцию Winsock? Я был бы рад пойти в другом направлении, если LSP — неправильный путь, но сторонние библиотеки — очень трудная задача для этого приложения — в противном случае, я бы посмотрел на Winpcap.
РЕДАКТИРОВАТЬ: Вау, это было давно. Для тех, кто пришел за мной, это в конечном итоге сработало. Мне стыдно сказать, что проблема была в том, что я компилировал с оптимизациями, которые мешали мне видеть правильные данные в отладчике. Когда я перестал быть ленивым и выбросил байты в файл, я увидел, что все хорошо.
LSP может только перехватывать трафик Winsock, DHCP находится на более низком уровне, для этого вам нужна другая технология, например: NDIS, TDI (не будет работать на Win8) или WFP (не будет работать на XP)
Других решений пока нет …