2.4.3 WinPcap的驱动程序

WinPcap的体系结构如图2-3所示,其中NPF是WinPcap的内核组件,用来处理网络上传输的数据包,并对用户层导出数据包进行捕获、发送与分析。下面将介绍NPF与操作系统及其他基础组件的交互操作。

2.4.3 WinPcap的驱动程序 - 图1

图 2-3 WinPcap的体系结构

WinPcap的NPF是作为一个协议驱动程序被实现的。从性能的角度来说,这可能并不是最好的选择,但是其允许与MAC子层具有合理的独立,同时也能完全访问原始的网络流量。NPF在内核中的位置如图2-4所示。

2.4.3 WinPcap的驱动程序 - 图2

图 2-4 NPF在内核中的位置

正常情况下,协议驱动程序与操作系统的交互是异步的。驱动程序提供了一个回调函数集,当有一些操作需要NPF处理时它就会被操作系统调用。NPF会为应用程序的所有I/O操作(open、close、read、write、ioctl等)导出对应的回调函数。

同样,协议驱动程序与网络驱动程序接口规范(NDIS)库的交互也是异步的。例如一个新数据包到来的事件就是通过一个回调函数Packet_tap()通知NPF的。此外,NDIS与NIC驱动程序的交互总是依靠非阻塞函数而发生的:当NPF调用一个NDIS函数时,该调用立即返回;当处理结束时,NDIS调用一个特定的NPF完成函数来通告该函数已经完成。驱动程序为任何底层的操作(如发送数据包、对NIC设置或请求参数等)导出一个对应的回调函数。