第9章 数据包的内核过滤

各网络分析工具实现的功能不尽相同,所期望处理的数据包类型也不尽相同。在实现相应的功能时,绝大多数情况下只需要使用所有数据包的一(小)部分。例如:对邮件系统进行监控可能只需要端口号为25(smtp)和110(pop3)的TCP数据包,对DNS系统进行监控就只需要端口号为53的UDP数据包。数据包过滤机制可很好地解决类似问题,应用程序只需简单地设置一系列过滤条件,便能最终获得满足条件的数据包。

数据包过滤操作可以在用户空间执行,也可以在内核空间执行。数据包从内核空间复制到用户空间的开销很大,所以如果在内核空间进行过滤,会极大提高数据包的捕获性能。在内核中进行过滤的优势在低速网络的情况下表现并不明显,在高速网络下则非常显著。在理论研究和实际应用中,数据包捕获和数据包过滤从语意上来说并没有本质的区别,关键在于需要认识到捕获数据包必然会有过滤操作。所以可以认为,数据包过滤机制在数据包捕获机制中占有中心地位。

WinPcap最强大的特性之一就是拥有过滤数据包的功能。它可提供非常有效的方法获取网络流量中的某些数据包,这也是WinPcap捕获机制中的一个重要组成部分。由于WinPcap的过滤功能直接源自BPF(BSD Packet Filter),因此WinPcap的过滤机制与BPF的过滤机制类似。

本章将介绍理解WinPcap过滤机制所必需的基础知识,并提供具体的使用实例,最后还将分析相关的实现细节。