什么是Windows机器上的Wireshark数据包接收和处理过程?

我即将在我的Windows计算机上使用Wireshark进行一些stream量监视。 在工作的时候,我想知道WiresharkWindows之前如何pipe理低级networking数据包。

首先,我的网卡上的一个networking接口接收一个数据包。 NIC然后进行一些初始检查(CRC,正确的MAC地址,等等)。 假设validation成功,NIC转发数据包。 但是如何和在哪里?

我知道驱动程序是NIC和OS或任何其他应用程序之间的粘合剂。 我进一步猜测, WindowsWireshark有一个单独的驱动程序( WinPcap ?)。 否则, Wireshark将无法接收以太网帧。 是否有两个或更多的NIC驱动程序同时共存? NIC如何知道使用哪一个?

Windows中的I / O模型基于一堆组件。 数据必须通过物理网卡和将使用数据的应用程序之间存在的堆栈的各个组件stream动。 有时候,这些不同的组件在数据stream通过堆栈时检查数据(例如TCP数据包),并且根据数据包的内容,数据可能被改变,或者数据包可能被完全丢弃。

网络堆栈

这是一个简化的“networking堆栈”模型,数据包stream经networking,以便从应用程序到networking,反之亦然。

以上屏幕截图中显示的最有趣的组件之一是WFP(Windows过滤平台)标注API。 如果我们放大这个,它可能看起来像这样:

Windows过滤平台

开发人员可以自由地将自己的模块插入到堆栈中的适当位置。 例如,防病毒产品通常使用插入此型号的“filter驱动程序”,检查networkingstream量或提供防火墙function。 Windows防火墙服务也显然适合这种模式。

如果你想编写一个loggingnetworkingstream量的应用程序,比如Wireshark,那么适当的方法是使用你自己的驱动程序,并尽可能低地插入堆栈,以便能够检测networking数据包在您的防火墙模块有机会放弃它们之前。

所以在这个过程中有很多“司机”。 也有许多不同types的驱动程序。 而且,系统上的其他forms的input/输出(例如硬盘驱动器的读取和写入)遵循非常相似的模型。

另外一个注意事项 – 粮食计划署的标注并不是让自己进入networking堆栈的唯一方法。 WinPCap作为一个例子,直接与驱动程序接口,这意味着它有机会在任何过滤之前拦截stream量。

NDIS驱动程序

WinPcap的

参考文献:

下一代TCP / IP协议栈在Vista +

Windows过滤平台体系结构

正如Ryan Ries的回答所说:

WinPCap作为一个例子,直接与驱动程序接口,这意味着它有机会在任何过滤之前拦截stream量。

这是WinPcap文档中描述如何工作的描述 。