如何使用Winsock LSP修改出站UDP流量?

时间:2012-10-17 22:35:48

标签: c++ windows udp winsock ipv6

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

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

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

WSPSendWSPConnect没有被调用,因为我们使用的是无连接协议 - 这是有道理的。我确实在WSPSendTo中获得了一致的回调,但lpBuffers成员(我的HTTP原型中包含表示传出数据包的缓冲区)是NULL

我是否完全以错误的方式解决这个问题,还是我需要覆盖另一个Winsock操作?如果LSP是错误的方法,我会很乐意向另一个方向前进,但是对于这个应用来说,外部库是非常难以销售的 - 否则,我会关注Winpcap。

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

1 个答案:

答案 0 :(得分:0)

LSP确实只能拦截Winsock流量,DHCP位于较低层,您需要使用不同的技术来执行此操作,例如:NDIS,TDI(无法在Win8上运行)或WFP(无法在XP上运行)< / p>