当前位置:  操作系统>Linux

高速的网络抓包库PF_ring介绍及编译安装

 
    发布时间:2014-4-8  


    本文导语: 1. PF_RING介绍 PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等)。PF_RING是一种新型的网络socket,它可以极大的改进包捕获的速...

1. PF_RING介绍

  PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如LibpcapTCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等)。PF_RING是一种新型的网络socket,它可以极大的改进包捕获的速度。并且有如下特征:

1) 可以用于Linux 2.6.18以上的内核;

2) 4.x版本的pf_ring可以直接应用于内核,不需要给内核打补丁;

3) PF_RING驱动可以进行包捕获的加速;

4) 支持使用商用网络适配器的10 GB的硬件包过滤

5) 设备驱动无关(推荐使用支持NAPI的网卡intel网卡)来获得最好的性能);

6) 基于内核的包捕获和采样;

7) Lipcap支持与基于pcap的应用程序的无缝集成

8) 可以指定上百个头过滤到BPF中;

9) 内容检查,以至于只有符合负载过滤的包才能通过;

10)PF_RING的插件可以用于增强包解析和内容过滤;

11)可以工作在混杂模式(经过网卡的报文全部可以被捕获到);



2.   编译

编译安装PF_RING之前需要卸载原来的网卡驱动,卸载之前使用ethtool命令查看当前网卡的类型和驱动版本。

# ethtool -i ethx

# lsmod | grep e1000e

# rmmod e1000e           此处为e1000e驱动

注:如果使用ssh远程卸载驱动会造成网络不能连接,务必现场操作。

2.1.  编译内核

解压缩PF_RING安装包,进入到Kernel目录下编译和安装内核补丁。

# tar -zxf PF_RING.4.7.0.tar.gz

# cd PF_RING.4.7.0/kernel

# make

# sudo make install             内核安装需要root用户权限

insmod <PF_RINGPATH>/kernel/pf_ring.ko [transparent_mode=0|1|2]

[min_num_slots=x][enable_tx_capture=1|0][enable_ip_defrag=1|0][quick_mode=1|0]

   实例

   # sodu insmod pf_ring.ko transparent_mode=1

当PF_RING激活时,会创建/proc/net/pf_ring目录,使用cat命令查看设置:

# cat /proc/net/pf_ring/info

注1:为了编译PF_RING内核模块,你需要安装Linux内核的头文件(或者内核源代码)。

2.2.  编译用户空间PF_RING库

进入到用户空间库userland/lib下,编译和安装。

# cd ../userland/lib

# ./configure

# make

# sodu make install

如果需要使用libpcap抓包分析,请卸载之前安装的libpcap,然后进入/userland/libpcap-xxx-ring/目录下配置、编译和安装驱动。


# rpm -qa libpcap    查看安装的libpcap,如果有libpcap则强制卸载

# rpm -e libpcap --nodefs  

# cd ../libpcap

# ./configure

# make

# sudo make install

注:为了使用pf_ring的优点,请使用pf_ring使能的libpcap.a重新编译应用。

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

# cd <PF_RING PATH>/userland/examples

# make

# ./pfcount -i eth0     捕获eth0网口的数据报文


注:使用drivers/intel/ixgbe下的驱动(支持DNA的ixgbe驱动的网卡)+DNA驱动技术可以达到线速采集,PF_RING模块必须在DNA驱动之前加载。

2.3.  编译网卡的驱动

进入到drivers目录下,根据ethtool -i ethx命令查看的网卡类型和驱动进入指定的目录进行编译和安装。

# cd ../../ drivers/intel/e1000e/e1000e-1.3.10a/src

# make

# sodu make install

开始安装驱动,进入/lib/modules/<redhat-version>/kernel/net目录,可以看到有pf_ring目录,进入到该目录下进行PF_RING模块的安装。

# sodu insmod pf_ring.ko transparent_mode=1

安装网卡驱动,进入到目录lib/modules/<redhat-version>/kernel/drivers/net下进行网卡驱动安装。

# sodu insmod e1000e.ko

# sodu modprobe e1000e  (只能载入/lib/modules/<kernel ver>/中模块)

安装完毕,使用dmesg命令查看驱动是否安装成功,如果成功的话,可以看到:

# dmesg

[PR_RING]…… 信息

pf_ring会安装一个类型为27的协议簇,可以使用sock(pf_ring, sock_raw,0)打开一个socket,使用libpcap的朋友不需要修改程序,需要重新编译,链接的时候请加上libpfring.so

启动自动加载PF_RING模块,修改/etc/modprobe.conf文件

# vi /etc/modprobe.conf

在文件的尾部增加一行 modprobe pf_ring

系统重启后内核会自动加载pf_ring模块,modprobe只能加载/lib/modules下的模块。


3. 使用

使用用户空间中的PF_RING库API来编写代码,并且使用用户空间中的libpfring.a和libpcap.a编译代码就可以使用PF_RING来提高包捕获的性能。


4. 在Ubuntu 8.04上的PF_RING编译安装过程



1)以 root权限做以下操作。

2安装工具mkinitrd

下载rpm安装包 http://ayo.freshrpms.net/fedora/linux/5/i386/rpms.core/

# rpm -ivh --nodeps mkinitrd-5.0.32-1.i386.rpm (注意,这里一定要加入--nodeps参数,下同)

3安装Kernel源码,如果/usr/src下没有的话,运行

# apt-get install linux-source-2.6.24

则linux-source-2.6.24.tar.bz2将位于/usr/src下

4下载PF_RING

cd /usr/src

svn co https://svn.ntop.org/svn/ntop/trunk/PF_RING/

5修改PF_RING下的mkpatch.sh

(1)查看内核版本

yu@yu-box:~$ uname –a

Linux zp 2.6.24-16-网络 iis7站长之家 #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux

(2)修改

PREFIX=linux-source #识别.tar.bz2后缀

VERSION=${VERSION:-2}

PATCHLEVEL=${PATCHLEVEL:-6}

SUBLEVEL=${SUBLEVEL:-24}

(3)执行 sh ./mkpatch.sh

则在/usr/local/src下生成patch好的内核目录

6编译内核

(1) 安装必要的包

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

(2) 拷贝当前配置

cd /usr/local/src/...

cp /boot/config-`uname -r` ./.config

(3) 配置

make menuconfig

a. Device Driver - Network Service Support - Ethernet (1000Mbit) and enable NAPI-Support by selecting ‘y’ on Use Rx Polling.

b. Go back (3x ESC) and select Networking and Networking Options. Make sure that PF_RING sockets are enabled

(4) 编译

make-kpkg clean

fakeroot make-kpkg --initrd --revision=pfring.1.0 kernel_image

[注]:本步骤也可以如下执行:

#cd /usr/local/src/...

#cp /boot/config-`uname -r` ./.config

#make

#make modules_install

#make install

7制作镜像文件

制作initrd文件 当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像语法: mkinitrd 文件名 内核的目录名

示例: #mkinitrd initrd-2.6.24.3.img 2.6.24.3

initrd-2.6.24.3.img文件是自己任意取的,但最好对应自己的内核版本号,会生成在/boot目录下。 2.6.24.3是在/lib/modules中的目录名,对应内核的版本

8修改/boot/grub/menu.list文件,增加如下内容:

title Ubuntu_RING 8.04, kernel 2.6.24.3 (recovery mode)

root (hd0,0)

kernel /boot/vmlinuz-2.6.24.3 root=UUID=719d2825-29dd-48ab-84fe-1ee7f0891fc6 ro single

initrd /boot/initrd.img-2.6.24.3


9重启系统,启动时选择新内核进入

10进入目录/usr/src/PF_RING/userland/lib,执行make,然后执行如下拷贝:

#cp libpfring.a /usr/local/lib

#cp pfring.h /usr/local/include

加载kernel module,取决于内核版本

2.4.x insmod ring.o

2.6.x insmod ring.ko

我的系统操作如下

#insmod /lib/modules/2.6.24.3/kernel/net/ring/ring.ko

11回到/usr/src/PF_RING/userland/目录,执行make编译,若出现如下错误,依次按方法解决:

A、configure错误

Configure: error: your operating system’s lex is insufficient to compile libpcap

解决办法:

# apt-get install flex

B、make错误1

Yacc: command not found

解决办法:

# apt-get install bison

C、make错误2

Undefined reference to ‘pcap_parse

解决办法:

# apt-get install libpcap-dev

到此为止,工程可以顺利编译!


  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:高速的网络抓包库PF_ring介绍及编译安装
相关文章推荐:
  • 一个页高速缓存的问题
  • 页面高速缓存 块缓冲区 TLB
  • 高速集群监控系统 SuperMon
  • 求能高速下载RedHat7.3的地方
  • 请问 linux与windows两个平台下如何实现高速数据传输?
  • 怎样手动清除磁盘高速缓冲?
  • 高速缓存能否配合TLB一起加快读取?
  • 高速缓存系统 kcached
  • 高速压缩解压缩开发包 Snappy
  • 高速U盘+Win_XP免安装工具盘+Linux(Ubuntu)便携式多系统
  • 在dos下怎么样察看wins的高速缓存的内容
  • 哪能高速下载redhat7.2
  • 求gentoo linux的高速下载地址 100分相送
  • 各位大虾,我的Red Hat Linux 7.2 (办公室高速LAN连接/固定IP)如何才能顺利上网???
  • 请教带定时器的,对高速运转的客户服务器(cs)系统的代码应该怎么调试。
  • 用导弹打固定轨道的卫星和用导弹打高速坠落的卫星,哪个更难些?
  • 页高速缓存 address_space的问题
  • 技术讨论:高速公路收费系统项目用JAVA技术来构建适合吗?
  • php精简高速ip查询免费版3.0 ip查询
  • videocapture库制作python视频高速传输程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3