发明名称 一种基于Linux的底层数据包的高速捕获方法
摘要 本发明提供一种基于Linux的底层数据包的高速捕获方法。本发明通过设定虚拟捕获设备模块(VUKM模块)修改网卡驱动程序,使到达网卡的数据包可以绕过内核协议栈直接转交给后续模块处理,以实现用户空间和内核空间的内存共享;并由内核空间高速传递给上层协议分析处理接口模块,为上层应用程序和网卡无冲突的访问VUKM模块提供一种机制,对已捕获的数据包作进一步处理,本发明可以在千兆网络环境下,高速获取经过网卡的原始数据包,可以克服传统的数据包捕获技术的弊端,提高获取效率。
申请公布号 CN101841470B 申请公布日期 2012.10.10
申请号 CN201010134367.4 申请日期 2010.03.29
申请人 东南大学 发明人 裴文江;刘荣伟;郑麒麟;张春;王开;孙庆庆
分类号 H04L12/56(2006.01)I;H04L29/06(2006.01)I;G06F12/08(2006.01)I 主分类号 H04L12/56(2006.01)I
代理机构 南京经纬专利商标代理有限公司 32200 代理人 许方
主权项 一种基于Linux的底层数据包的高速捕获方法,其特征在于:包括准备步骤和工作步骤:(一)、准备步骤:(I)、修改网卡驱动程序中的中断处理函数提交数据包部分的响应代码,使修改过的网卡驱动程序能够满足到达网卡的网络数据包绕过内核协议栈直接转交给后续构建的虚拟捕获设备模块,供上层协议分析子系统的用户空间进程获取;(II)、构建虚拟捕获设备模块,向内核中注册虚拟捕获设备模块实现内存映射,使内核和上层协议分析子系统的用户空间的应用程序共享内存;所述虚拟捕获设备模块包括接收环、发送环、空闲环和数据缓冲区;其中:数据缓冲区为在物理上和逻辑上均连续的链表结构,用于存放到达网卡的数据包,以“零拷贝”方式向上层协议分析子系统的用户空间提供数据;接收环用于使上层协议分析子系统的用户空间从接收环中获取已经填充的数据缓冲区结构;空闲环用于将上层协议分析子系统的用户空间处理完毕的数据缓冲区结构归还给数据缓冲区;发送环用于将上层协议分析子系统的用户空间需要发送的数据填入数据缓冲区结构,然后从网卡发送出去;(III)、设置协议分析接口,用于提供上层协议分析子系统与虚拟捕获设备模块的接口,使上层协议分析子系统对从虚拟捕获设备模块获取的底层数据包进行解析、识别和分类后续处理;(二)、工作步骤:A、初始化虚拟捕获设备模块,并向内核注册该模块,计算接收环、空闲环、发送环和数据缓冲区的大小,接收环、发送环、空闲环及数据缓冲区的大小均为linux中页面大小的整数倍;B、在内核空间,为接收环、发送环、空闲环和数据缓冲区分配内存空间,调用内核函数将分配的所有内存页锁住,使这些内存页在系统运行的过程中不被换出内存;C、将虚拟捕获设备模块的这些内存空间全部映射到用户空间中去;D、在虚拟捕获设备模块中将一个数据缓冲区结构挂入接收环中;E、当外部网络的数据包到达网卡,网卡以中断或者新应用程序接口(NAPI)方式处 理到达的数据包,然后转交给虚拟捕获设备模块中的数据缓冲区,同时向协议分析接口发送信号,告知有数据包到达;F、虚拟捕获设备模块获取数据包后,将该数据包挂入接收环中的数据缓冲区结构;G、协议分析接口将数据缓冲区的数据包封装为sk_数据缓冲区结构,并将sk数据缓冲区结构转交给上层协议分析子系统进行分析处理;H、上层协议分析子系统处理完毕后,再通过协议分析接口将存储该数据包的数据缓冲区归还给虚拟捕获设备模块的空闲环;同时将需要发送的数据发送给发送环;I、发送环将H步骤所述需要发送的数据填入数据缓冲区结构,然后从网卡发送出去。
地址 215123 江苏省苏州市工业园区独墅湖高教区林泉街399号