【问题标题】:How to modify outbound UDP traffic with a Winsock LSP?如何使用 Winsock LSP 修改出站 UDP 流量?
【发布时间】:2012-10-08 07:25:59
【问题描述】:

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

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

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

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

我是否完全错误地处理了这个问题,还是我需要覆盖另一个 Winsock 操作?如果 LSP 是错误的方式,我很乐意转向另一个方向,但是外部库对于这个应用程序来说是一个非常艰难的销售——否则,我会考虑 Winpcap。

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

【问题讨论】:

  • 你确定你正确地声明了WSPSendTo()吗?其他参数值是否正确?

标签: c++ windows udp winsock ipv6


【解决方案1】:

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

【讨论】:

  • 谢谢巴拉克;我对此很担心,所以在开始整个练习之前,我希望确保仅包含 DHCP 服务器的 svchost.exe 确实加载了 w2_32.dll(确实如此)。但是,总而言之,你是说 LSP 不可能在这里工作,尽管我看到 DLL 被加载,尽管我得到一个回调,只是奇怪缓冲区?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2011-04-25
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多