2

我正在构建一个需要在 DHCPv6 数据包连接之前动态修改它们的应用程序。我正在使用 DHCPv6 供应商选项进行一些高度专有的工作,并且我需要能够在传输之前检查和修改内存中的这些选项。

我通过修改 Microsoft 示例代码在 Winsock 之上构建了一个概念验证分层服务提供程序。它拦截传出的 HTTP 数据包,将引用代理更改为有趣的东西,并在途中发送数据包。在 Wireshark 中验证,效果很好。

更改我的安装程序代码也很简单,以便我的 LSP 被链接在 UDP/IPv6 而不是 TCP/IPv4 之上,现在,在连接了调试器的情况下,我可以看到自己收到带有通向 DHCP 服务器的堆栈的回调。但是,我再也看不到内存中的缓冲区了。

WSPSend并且WSPConnect不要被调用,因为我们使用的是无连接协议——这是有道理的。我确实得到了一致的回调,WSPSendTo但是lpBuffers在我的 HTTP 原型中包含表示传出数据包的缓冲区的成员是NULL.

我是否以完全错误的方式进行此操作,还是我需要覆盖另一个 Winsock 操作?如果 LSP 是错误的方式,我会很高兴转向另一个方向,但是外部库对于这个应用程序来说是一个非常艰难的销售 - 否则,我会关注 Winpcap。

编辑:哇,这是很久以前的事了。对于那些在我身后的人来说,这最终效果很好。我很尴尬地说,问题在于我正在使用优化进行编译,导致我无法在调试器中看到正确的数据。当我停止偷懒并将字节转储到文件中时,我发现一切都很好。

4

1 回答 1

0

LSP 确实只能拦截 Winsock 流量,DHCP 处于较低层,你需要不同的技术来做到这一点,例如:NDIS、TDI(在 Win8 上不起作用)或 WFP(在 XP 上不起作用)

于 2012-10-18T13:33:37.907 回答