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

Han*_*nsi 20 networking ethernet wireshark

我即将使用Wireshark在我的Windows计算机上进行一些流量监控。在研究它时,我想知道Wireshark如何在Windows之前设法捕获低级别网络数据包。

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

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

Rya*_*ies 38

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

网络堆栈

这是“网络堆栈”的简化模型,数据包通过该模型从应用程序到达线路,反之亦然。

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

Windows 过滤平台

开发人员可以自由地将他们自己的模块插入到该堆栈中的适当位置。例如,防病毒产品通常使用“过滤器驱动程序”,该驱动程序插入此模型并检查网络流量或提供防火墙功能。Windows 防火墙服务显然也适合这种模式。

如果您想编写一个记录网络流量的应用程序,例如 Wireshark,那么合适的方法是使用您自己的驱动程序,并将其插入到堆栈尽可能低的位置,以便它可以检测网络数据包在您的防火墙模块有机会丢弃它们之前。

所以在这个过程中有很多“驱动因素”。许多不同类型的驱动程序。此外,系统上的其他形式的输入/输出,例如硬盘驱动器读取和写入,遵循非常相似的模型。

另一个注意事项 - WFP 标注并不是将自己带入网络堆栈的唯一方法。例如,WinPCap 与 NDIS 直接与驱动程序接口,这意味着它有机会在任何过滤发生之前拦截流量。

NDIS 驱动程序

赢盘

参考:

Vista+ 中的下一代 TCP/IP 堆栈

Windows 筛选平台体系结构

  • 杰出的图表。这些发布在 microsoft.com 上的某个地方吗?如果是这样,我很想四处看看,看看还有哪些其他信息可用。 (3认同)