我想编写一个 NDIS 微型端口驱动程序,作为虚拟适配器映像描述在此处弹出(就像 VMWare 一样)。其目的是将数据包转发到现有连接的 vpn 内部 IP(适配器)。可能有许多现有的 vpn 连接。我的驱动程序通过不同的进程将数据包转发给其中一个(这些进程可能连接到同一个 IP,因此用于区分不同连接的路由表将不起作用)。
我可以参考的任何提示或示例?谢谢。
NDIS 驱动程序是低级的。他们不了解用户模式进程;当数据包到达 NDIS 时,所有进程上下文都消失了。由于您的问题陈述似乎非常关心用户模式进程标识,因此 NDIS 驱动程序可能不是该问题的合适解决方案。
听起来您可以使用WFP将流量引导到适当的接口。WFP 本质上是一个巨大的规则引擎:有输入规则(例如“进程名称是 'notepad.exe'”或“用户是 'bob'”)和输出操作(例如“将所有流量重新路由到网络接口 42”)。如果您足够幸运能够使用内置规则和操作来表示您的问题,那么您甚至可能根本不需要编写任何内核代码。(想想你会节省的所有时间!)
如果由于某种原因您不能使用 WFP(也许您需要以 Windows XP 为目标),那么您应该研究编写 Winsock LSP。LSP 插入目标进程内的套接字代码,并可以进行某种程度的流量操作。