WinPcap学习(十一)底层学习

来源:互联网 发布:帝国cms批量删除文章 编辑:程序博客网 时间:2024/05/22 10:31

WinPcap包含一个内核级的数据包过滤器,一个低层的动态链接库(packet.dll),一个高层的、依赖于系统的库(wpcap.dll)。

WinPcap的主要结构如上。

首先,捕获系统需要占用操作系统的协议栈,来访问通过网络的原始数据。这就需要有部分内容要运行在操作系统内核中,能直接访问网络接口驱动。这部分内容非常依赖于系统,在WinPcap的解决方案中,它被认为是设备驱动,称为NetGroup Packet Filter(NPF)。

其次,捕获系统必须输出一个端口,以便用户应用程序利用内核驱动所提供的特性。WinPcap提供了两个不同的库:packet.dll和wpcap.dll。第一个提供了低层的API,它可以直接访问驱动的函数,并且依赖于微软操作系统的可编程接口。第一个提供了更多强大的、高层的,和libpcap兼容的捕获原语。

NPF和NDIS

NDIS(Network Driver Interface Specification)是一个标准,定义了网络适配器(可适配器驱动程序)和协议驱动程序(如TCP、IP的实现)间的通信。NDIS的主要作用是封装,以使协议驱动在收发数据包时不需要考虑适配器和操作系统。

NDIS支持三种网络驱动:

(1)Network interface card or NIC drivers.

NIC驱动直接管理网卡,它直接操作硬件并向上一层提供接口用于发送数据、处理中断、复位NIC、停止NIC、查询和设置驱动的其它可操作属性。

(2)Intermediate drivers

中层驱动介于上层驱动(如协议驱动)和miniport之间,从上层驱动来看,中层驱动像是一个miniport。从miniport来看,中层驱动像是一个协议驱动。开发这类驱动的主要原因多是用于协议驱动和miniport间传输媒体。一个中层驱动不能与用户模式的应用交互,只能与其它的NDIS驱动交互。

(3)Transport drivers or protocol drivers

一个protocol driver实现了网络的协议如:IPX/SPX或TCP/IP,并向一个或多个网卡提供它的服务。


NPF作为协议驱动实现,与操作系统的交互是异步的,这意味着驱动提供了一组回调函数,当调用NPF时,NPF调用这些系统回调函数。



NPF structure basis


NPF可以运行一些不同的操作:捕获、监控、dump to disk、包注入。

(1)Packet Capture

NPF最重要的操作就是包捕获,驱动通过网络接口检测到数据包并把它传递给用户级应用程序。

这个捕获过程依赖两个主要的部分:

  • 一个包过滤器,NFP采用的过滤系统源于BSD Packet Filter(BPF)。
  • 一个环形缓存
用户缓冲的大小很重要,因为它决定了一次系统调用从内核空间向用户空间可以拷贝的最大数据量。同时,一次系统调用最小的数据复制量也很重要。
wpcap库包括一组系统调用,即可以设置读包超时时间,也可以设置传输最小数据量。默认,超时为1s,最小传输量为16k。
(2)Packet injection
NPF允许从网络上读取原始包。发送数据时,用户应用程序调NPF的WriteFile系统调用,被发送的数据包也不会进行封装,因此需要手动添加协议头文件。另入如果相让一个数据包重复发送多次,可以调用IOCTL系统调用。
(3)Network monitoring
WinPcap提供了一个内核级可编程监控模型,可以统计网络通信。监控引擎由一个分类器和一个计数器组成。包利用NPF的分类引擎秋分类。
(4)Dump to disk


0 0
原创粉丝点击