NDIS 6.x以太网桥驱动程序

时间:2013-04-03 15:58:39

标签: driver windows-7-x64 ethernet ndis bridge

我想知道使用NDIS 6.x构建以太网桥的最佳选择和方法是什么。我应该从哪里开始,我应该使用哪一个,Miniport,IM,协议或过滤器驱动程序?

尝试自定义WDK中可用的协议驱动程序示例,并成功连接到以太网适配器。下一步是什么?

非常感谢任何帮助。

使用Windows 7x64

2 个答案:

答案 0 :(得分:1)

让我们看看可用的NDIS驱动程序类型:微型端口,轻量级过滤器和协议。

NDIS微型端口无法解决此问题,因为微型端口从主机操作系统接收数据包。你想要一些从网络接收数据包的东西。

NDIS轻量级过滤器可以解决这个问题,但解决方案有点笨拙。您必须在两个不相关的微型端口堆栈之间手动同步。这比看起来更难;其他曾经尝试过的人在最初的几次尝试中都犯了这个错误。

NDIS协议驱动程序是解决此问题的最佳方法。协议驱动程序旨在连接到多个微型端口,协议驱动程序能够将数据包从一个微型端口堆栈路由到另一个微型端口。

但是协议驱动程序缺少一个功能。如果您只是编写协议驱动程序,那么这就是驱动程序的排列方式:

[TCPIP]  [YourProtocol]
    | \  / |
    |  \/  |
    |  /\  |
    | /  \ |
 [NIC0] [NIC1]

也就是说,主机的TCPIP堆栈将两个NIC视为单独的NIC。 (@Aczire,你在a previous question表示这对你来说没问题。但是出于说明的目的,这是故事的其余部分。)

NDIS允许您使用 MUX-IM驱动程序解决此类问题。 IM驱动程序基本上只是一个粘在另一个微型端口上的协议。这使您可以准确控制主机操作系统看到的内容:

    [TCPIP]
       |
       |
       |
       |
 [YourMiniport]
 [YourProtocol]
    |      |
    |      |
    |      |
    |      |
 [NIC0] [NIC1]

使用这种架构,您可以欺骗主机操作系统认为这两个网络是相同的。 (例如,面向用户的GUI将显示单个网络适配器,而不是两个。)但是,IM驱动程序的成本相当高:它们很难编写,甚至更难以正确使用。除非您有丰富的经验和时间,否则我不建议您解决IM驱动程序。

答案 1 :(得分:0)

现在你已经有了一个协议驱动程序:下一步是什么?

  1. 确保您的协议绑定到您关心的两个适配器。
  2. 在两个适配器上设置混杂的数据包筛选器(您希望接收所有流量,甚至是不是发往localhost的流量)
  3. 在一个接口上接收数据包时,克隆NBL并在另一个接口上发送克隆。请务必阅读克隆规则。
  4. 您应该检测布线周期,这样就不会使网络泛滥。

    您应该通过802,802.1802.3的IEEE标准阅读(ok,skim),因为它们对桥梁应该做什么有一些特定的规则。例如,您可能希望特殊情况下目标MAC地址01-80-C2-00-00-00。