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



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

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

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

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

我是不是完全错了,或者我需要覆盖另一个Winsock操作?如果LSP走错了路,我很乐意走另一个方向,但外部库对这个应用程序来说是一个非常艰难的销售——否则,我会考虑Winpcap。

编辑:哇,这是很久以前的事了。对于我身后的人来说,这最终起到了很好的作用。我很不好意思地说,问题是我使用的优化使我无法在调试器中看到正确的数据。当我不再懒惰,把字节转储到一个文件中时,我发现一切都很好。

LSP只能拦截Winsock流量,DHCP位于较低层,您需要不同的技术来实现这一点,例如:NDIS、TDI(在Win8上不工作)或WFP(在XP上不工作

最新更新