我是靠谱客的博主 魁梧世界,最近开发中收集的这篇文章主要介绍在ubuntu16.04上利用pf_ring加速libpcap进行抓包,千兆网运行流畅,不丢包,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近项目需要,需要在千兆网下进行收包,带宽在800Mb左右,传统socket或者rawsocket很容易丢包,因而使用libpcap抓包。经测试,libpcap的接收速度远不如传统socket或者rawsocket,但是好处就是收包比较稳定,并没有丢包现象,据查,linux版本的libpcap是在应用层做的,内部使用的就是rawsocket(不知真假),怪不得时间那么慢。为了提示收取速度,引入pf_ring进行收包加速,过程略有些坑,特此记录。

下载pf_ring源码

源码链接

编译安装pf_ring内核

  • 解压PF_RING-dev.zip;

  • cd PF_RING/kernel

  • make 生成 pf_ring.ko

  • sudo make install

  • insmod pf_ring.ko thansparent_mode=1 注意: thansparent_mode有三种模式, 越高的transparent_mod值,获得报文捕获的速度越快:

     0: 缺省,不需要安装任何驱动, 利用标准的Linux接口接收报文, 任何驱动都能使用该模式.
    
     1: 需要安装驱动.
    
     2: 需要安装驱动, pfring以外程序抓不到数据包
    

安装 pf_ring 库

安装依赖
apt-get install flex bison

  • cd PF_RING/userland/lib
  • ./configure --prefix=/usr
  • make;
  • sudo make install

安装pf_ring网卡驱动

  • 用ethtool查看你的网卡型号。如,ethtool -i eno1
  • 卸载原网卡驱动:如,sodu rmmod e1000e
    此时通过ifconfig -a已经查询不到这个网卡的信息了
  • 进到驱动目录,driversintele1000ee1000e-3.4.0.2-zc
  • make;
    这里不make的话,下一步会提示make失败
  • 进入源代码目录 src cd src/
  • make 生成e1000e.ko文件
  • sudo make install
    此时提醒 无法在 catman 模式下对**** 写入 不用管它,继续下一步
  • sodu insmod e1000e.ko 安装网卡驱动
  • sodu modprobe e1000e 载入网卡驱动
    通过 ifconfig -a 可以查看这个网卡的信息。

编译libpcap

查看是否安装了libpcap 如有,则卸载,如果源码make install安装,则在源码文件中进行 make uninstall

  • rpm -qalibpcap // 查看安装的libpcap,如果有libpcap则强制卸载

编译源码内自带的libpcap1.8.1

-进入 cd userlandlibpcap

  • 修改源码ring内核缓冲区设为10M ,默认2M
    源代码:userland/libpcap/pcap-linux.c
    函数:int activate_mmap(pcap_t*handle);

     代码片段:
     	if(handle->opt.buffer_size == 0) {
     	/* by defaultrequest 2M for the ring buffer */
     		handle->opt.buffer_size= 2*1024*1024;
     	 } 
    
  • 配置编译:
    ./configure --prefix=usr/
    make

  • sudo make install

测试

进入到userland/examples目录编译例子程序。

cd /userland/examples

make

./pfcount-i eno1 // 捕获eno1网口的数据报文使用pf_ring

./pcount –i eno1 // 捕获数据 没有使用pf_ring

使用

在应该程序中宏定义(这一步在makefile中加了 -DHAVE_PF_RING 时可以省略)

#define HAVE_PF_RING

最后

以上就是魁梧世界为你收集整理的在ubuntu16.04上利用pf_ring加速libpcap进行抓包,千兆网运行流畅,不丢包的全部内容,希望文章能够帮你解决在ubuntu16.04上利用pf_ring加速libpcap进行抓包,千兆网运行流畅,不丢包所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部