【发布时间】:2012-10-08 07:25:59
【问题描述】:
我正在构建一个应用程序,该应用程序需要在 DHCPv6 数据包连接之前动态修改它们。我正在使用 DHCPv6 供应商选项进行一些高度专有的工作,并且我需要能够在传输之前检查和修改内存中的这些选项。
我通过修改 Microsoft 示例代码在 Winsock 之上构建了一个概念验证分层服务提供程序。它拦截传出的 HTTP 数据包,将引用代理更改为有趣的东西,并在途中发送数据包。在 Wireshark 中验证,效果很好。
更改我的安装程序代码也很简单,这样我的 LSP 就被链接在 UDP/IPv6 而不是 TCP/IPv4 之上,现在,在附加了调试器的情况下,我可以看到自己收到带有堆栈的回调DHCP 服务器。但是,我再也看不到内存中的缓冲区了。
WSPSend 和 WSPConnect 不会被调用,因为我们使用的是无连接协议——这是有道理的。我在WSPSendTo 中确实得到了一致的回调,但lpBuffers 成员,在我的HTTP 原型中包含代表传出数据包的缓冲区,是NULL。
我是否完全错误地处理了这个问题,还是我需要覆盖另一个 Winsock 操作?如果 LSP 是错误的方式,我很乐意转向另一个方向,但是外部库对于这个应用程序来说是一个非常艰难的销售——否则,我会考虑 Winpcap。
编辑:哇,这是很久以前的事了。对于那些在我身后的人来说,这最终效果很好。我很尴尬地说,问题在于我正在使用优化进行编译,这使我无法在调试器中看到正确的数据。当我不再偷懒并将字节转储到文件中时,我发现一切都很好。
【问题讨论】:
-
你确定你正确地声明了
WSPSendTo()吗?其他参数值是否正确?
标签: c++ windows udp winsock ipv6