如何使用NDIS筛选器驱动程序从协议层重定向TCP数据包?

问题描述

我正在为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层运行。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...