pf-ring 系统管理员 2023-05-28 11:12 31阅读 0赞 # 1. 概述 # PF\_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如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) 可以工作在混杂模式(经过网卡的报文全部可以被捕获到); ![0_1313850641DD7o.gif][] 官网:[http://www.ntop.org][http_www.ntop.org] 最新版本4.7,下载网址<http://sourceforge.net/projects/ntop/files/PF\_RING/>。 最新版本的目录结构: Drivers/ Drivers/Broadcom/ Drivers/Intel/ Drivers/myricom/ Kernel/ 内核有关的补丁 Userland/ 用户空间代码 Userland/lib 用户空间库用于控制PF\_RING Userland/libpcap-xxx-ring PF\_RING支持的Libpcap增强库 Userland/examples/ 包计数应用(使用它作为测试使用) # 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来提高包捕获的性能。 请详细的内容请参考网址:[http://www.ntop.org/PF\_RING.html][http_www.ntop.org_PF_RING.html] 用户手册:[https://svn.ntop.org/svn/ntop/trunk/PF\_RING/doc/UsersGuide.pdf][https_svn.ntop.org_svn_ntop_trunk_PF_RING_doc_UsersGuide.pdf] [0_1313850641DD7o.gif]: /images/20230528/71dadc061cc1481c860c025d78c20b31.png [http_www.ntop.org]: http://www.ntop.org/ [http_www.ntop.org_PF_RING.html]: http://www.ntop.org/PF_RING.html [https_svn.ntop.org_svn_ntop_trunk_PF_RING_doc_UsersGuide.pdf]: https://svn.ntop.org/svn/ntop/trunk/PF_RING/doc/UsersGuide.pdf
相关 libpcap和pfring应用程序--Pcap_open_live(二) 首先以libpcap为主线,先通过pcap\_open\_live函数,做一些初始化的操作,比如打开网卡,设置好读取数据包的回调函数等等,然后就可以通过pcap\_next,p 末蓝、/ 2022年09月30日 09:44/ 0 赞/ 950 阅读
还没有评论,来说两句吧...