多核CPU下基于PF_RING和设备轮询机制的高性能包捕获技术研究中心:北京分公司部门:研发部姓名:齐战胜1内容提要自我介绍技术背景理论知识解决方案参考资料21自我介绍齐战胜,研发部,北京分公司,软件研发工程师主要做协议分析、还原。参与的项目有抽查工具、NF-7800、NF-9300、NF-9600等。为了解决NF-7800的千兆抓包问题,开始研究Linux下高性能抓包的解决方法。32技术背景被动数据捕获技术在网络安全领域有着极其丰富的应用。如IDS(入侵检测系统)、防火墙以及一些部署在网络出口的互联网内容分析系统等。随着网络带宽的增加,网络传输速率的提高,传统的数据包捕获技术越来越不能满足要求。本文从Linux/Unix平台下的Libpcap网络数据包捕获函数库入手,研究Linux/Unix平台下高性能的数据包捕获解决方案。43理论知识Libpcap简介 1)Libpcap简介 2)Libpcap工作机制 3)Libpcap抓包性能分析NAPI技术简介 1)NAPI技术简介 2)NAPI工作机制 3) Libpcap是Unix/Linux平台下的网络数据包捕获的函数库。它是一个独立于系统的用户层包捕获API接口,为底层网络监听提供了一个可移植的框架。 应用:Sniffer、Wireshark、Snort、Tcpdump等。 1)可从以太网、虚拟接口等一个或多个网络接口捕获数据包; 2)平台无关性; 3)具有基于BPF的数据包过滤特性。完善了系统的数据包过滤体系。 Libpcap主要由两部分组成:workTap)和数据过滤器(PacketFilter)。 网络分接头从网络设备驱动程序中收集数据拷贝,数据过滤器决定是否接受该数据包。 libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区(一次拷贝),并传递给用户缓冲区(又一次拷贝),匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。 /*第一步:查找可以捕获数据包的设备*/ device=pcap_lookupdev(errbuf); /*第二步:创建捕获句柄,准备进行捕获*/ p=pcap_open_live(device,8000,1,500,errbuf); /*第三步:如果用户设置了过滤条件,则编译和安装过滤代码*/ pile(p,&fcode,filter_string,mask); pcap_setfilter(p,&fcode); /*第四步:进入(死)循环,反复捕获数据包*/ for(;;) { while((ptr=(char*)(pcap_next(p,&hdr)))==NULL);/*第五步:对捕获的数据进行类型转换,转化成以太数据包类型*/ eth=(_hdr*)ptr; /*第六步:对以太头部进行分析,判断所包含的数据包类型,做进一步的处理*/ if(eth->ether_type==ntohs(ETHERTYPE_IP))………… if(eth->ether_type==ntohs(ETHERTYPE_ARP)) ………… } /*最后一步:关闭捕获句柄,一个简单技巧是在程序初始化时增加信号处理函数, 以便在程序退出前执行本条代码*/ pcap_close(p);10
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究 来自淘豆网www.taodocs.com转载请标明出处.