panghaoyu 发表于 2013-10-29 09:25

网络数据包抓取与分析--扫盲贴+求助

本帖最后由 panghaoyu 于 2013-10-29 09:30 编辑

一个好的包捕获系统应该尽可能少的丢包,实时捕获流经系统的所有数据包,而且应该较少地占用 CPU 资源,使得系统拥有更多的时间来对数据包内容的进行处理。在包捕获硬件方面,当前市场上有很多千兆以太网报文处理网卡,如 Endace 公司生产的 DAG 网卡、Liberouter 及SCAMPI 项目开发的 COMBO 网卡等。由于基于硬件的捕包方式价格比较昂贵,而且系统缺乏一定的灵活性,难以适应当今瞬息万变的网络发展现状与具体的流量分析需求。

在包捕获软件方面,设计了很多优秀的包捕获函数库如Libpcap、nCap、DMA-Ring 和 PF_RING 等。Libpcap 是一个优秀的数据包捕获函数库,由网卡驱动、操作系统内核协议栈以及套接字接口三个部分组成,由于消耗了较高的 CPU 资源、引入了较高的包传输延时等问题,效率较低。为了提高包捕获的效率,很多研究人员已经做了大量的工作,包括从操作系统和应用软件两个方面进行优化。

在操作系统方面:由于很多网络应用都有实时性的要求,增加了一些实时的内核来提高网络的实时性;为了避免频繁的中断造成的中断活锁现象,Linux 内核中引入了一些新的 API 函数,简称NAPI(NewAPI),通过在重负载的情况下采用轮询的方式来提高包捕获系统的性能。在应用软件方面:一种方式是减少内存拷贝次数,Libpcap-mmap、nCap、DMA-RING 和 PF_RING都采用了这种方式;第二种方式是减少系统调用的次数。综合分析以上包捕获技术,发现以上没有任何一种包捕获接口的速度能达到千兆线速的处理目标,即使它们的设计目标是这样;第二,都是基于单核的系统来进行设计,没有考虑到发挥多核平台和多收发队列网卡的优势来增加系统的吞吐量


-------------------------------

我没有太多这方面的的开发经验,只是了解一点。

我希望借助 endace dag 卡(Endace Dag 4.3 GE Dual Port PCI-X traffic capture card)或者(Endace DAG 3.52 Network Monitoring Card)或者 (Endace DAG 3.51 Network Monitoring Card)   

或者借助 PF_RING的方式,实现抓取一个千兆端口的数据,(峰值 有数百M),我只需要过滤出 用户请求HTTP的 URL即可,我想知道怎么编写并部署

服务器主机(插卡的那台机器)上的抓包分析程序,还有,endace dag 卡的驱动老版本的去哪儿找啊

求各位前辈指点。谢谢大家了

feng32tc 发表于 2013-10-29 10:35

1. 抓包工具的主循环势必是单线程的,主循环独占一个线程
2. 要发挥多核的优势,势必要使用额外的进程、线程,但是建立线程的操作本身亦是系统调用,过于频繁地建立线程对系统是一个比较大的负担。所以这里有必要使用一个线程池技术 (Windows平台下),LZ可以去看看《Windows核心编程》的相关章节
3. 我们算一下,假设峰值速率有80 MB/s (640 Mbit/s),且报文的平均大小为1 KB,那么每秒就要处理80000个报文,这个负荷确实比较大。LZ可以先对系统的基准性能进行测试后再进行进一步的设计,比如说,抓到包以后什么都不做,直接准备抓下一个报文,那么能处理多大的流量

panghaoyu 发表于 2013-10-29 10:59

多谢 feng32tc 指点,

我只需要URL,请问有什么开源的可以用吗,比如tcpdump + PF_RING之类的

项目时间太紧,如果不能开发,只能买了

feng32tc 发表于 2013-10-29 14:18

本帖最后由 feng32tc 于 2013-10-29 17:50 编辑

回复 3# panghaoyu

之前写过一个Windows下的网络监视器,是基于WinPcap / Win32 SDK 开发的,数据库使用的是 SQLite。我把这个软件开源了,托管在 Google Code 上,名字是 win32-netmon,博客介绍页面是http://www.cnblogs.com/F-32/p/3166117.html。

至于性能问题嘛,这个软件就设置了一个单独的抓包和简单解析线程,100Mbps的流量下完全不卡,至于1000Mbps还真没试过,有兴趣的话你可以测试测试。

panghaoyu 发表于 2013-10-29 19:21

非常感谢feng32tc ,我会 好好研究一下的
页: [1]
查看完整版本: 网络数据包抓取与分析--扫盲贴+求助