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