问题描述
我正在为Windows编写NDIS筛选器驱动程序。现在我遇到了问题。
我将TCP数据包重定向到安装了NDIS筛选器驱动程序的当前PC上的TCP服务器。例如,当前PC的IP地址为192.168.1.1
,并且其上有一个TCP服务器正在监听端口8000
。
用户在IE浏览器中输入URL:http://192.168.1.10/xxxx,而我的NDIS筛选器驱动程序可以绝对看到TCP SYN
数据包。我将数据包的目标IP地址修改为192.168.1.1
,并将目标端口修改为8000
,因为我希望数据包可以重定向到本地TCP服务器。
然后,我使用NdisFIndicateReceiveNetBufferLists()
将NBL注入接收路径,而不是将其发送到底层的微型端口驱动程序。
但是,似乎本地TCP服务器永远无法获得重定向的SYN
数据包。我不知道哪里出了问题。有人会帮助我还是给我一些建议?
非常感谢您!
解决方法
通常,您不能从一个路径(发送路径)获取NBL,而只能将其放入另一路径(接收路径)。您需要克隆NBL并指示克隆。另外,您还必须编辑IP和TCP标头以修正校验和。
但是在您沿这条路线走之前,请注意,WFP标注是此项目更合适的驱动程序类型。 WFP标注设计为在the network stack的第3层和第4层运行,而NDIS则在第2层运行。