9.2 WinPcap数据包过滤基础

9.2.1 数据包过滤过程

数据包到达网络接口时,数据链路层的设备驱动程序通常是将数据包直接传送给协议栈进行处理。当NPF以一个协议驱动程序注册时,NPF也就类似于一个协议栈。数据链路层驱动程序在将数据包传送给协议栈时也会传递给NPF。NPF负责将此数据包指针传递至内核过滤器(可能有多个),过滤器决定数据包是否被接收,以及数据包中的哪些内容将被接收。对于每一个过滤器决定接收的数据包,NPF都会执行数据复制工作,从而将所需的数据复制到与过滤器相关的缓存中,以供用户进程读取。

NPF独立于诸如TCP/IP协议的主机协议来捕获网络数据包。这表示WinPcap不能阻塞、过滤或操纵同一机器上其他应用程序的通信,它只是简单地“嗅探”网络上所传输的数据包。

NPF会先对数据包进行过滤后再缓冲,这就避免了先缓冲每个数据包直到用户读取数据时再进行过滤所造成的效率损失。