从 Github Releases 页面下载源代码。本文使用的 PF_RING 8.4。
按需设置代理,比如 export https_proxy=http://10.1.1.117:7890。
# curl --location-trusted -O https://github.com/ntop/PF_RING/archive/refs/tags/8.4.0.tar.gz
本文使用的操作系统是 Ubuntu 20.10。
# sudo apt update && sudo apt install -y make gcc bison flex byacc
卸载系统自带的 libpcap,比如博主的操作系统安装的是 libpcap0.8:
# ldconfig -p | grep libpcap
libpcap.so.0.8 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcap.so.0.8
# sudo apt remove -y libpcap0.8
# ldconfig -p | grep libpcap
# tar zxvf 8.4.0.tar.gz
# cd PF_RING-8.4.0/
进入
PF_RING-8.4.0/kernel/
目录。
# make && sudo make install
进入
PF_RING-8.4.0/kernel/
目录。
# sudo insmod ./pf_ring.ko
使用如下命令查看内核模块 pf_ring 的参数:
# modinfo pf_ring
其中以 parm:
开头的行是内核模块 pf_ring 的参数。
比如,enable_ip_defrag
参数的作用如下。
IP 数据包可以被分片成较小的片段进行传输,然后在目的地重新组装成完整的数据包。这种分片和重组的过程在网络中是常见的,特别是在处理大型数据包或经过具有较小 MTU(最大传输单元)限制的链路时。
enable_ip_defrag
参数的作用是控制 pf_ring
是否对接收到的 IP 分片进行重组。以下是该参数的作用:
当 enable_ip_defrag
设置为 1 或启用时,pf_ring
将自动重组接收到的 IP 分片,以确保应用程序在处理数据包时获得完整的数据包。这对于需要处理完整数据包的应用程序非常有用,比如网络流量分析和深度数据包检测应用。
当 enable_ip_defrag
设置为 0 或禁用时,pf_ring
不对接收到的 IP 分片进行重组。这可以在某些情况下提高性能,特别是当应用程序只对数据包的某些字段感兴趣,而不需要完整的数据包内容时。
如果想在 Intel 适配器上,实现万兆及以上的速率捕获数据包,那么需要使用零拷贝驱动。本文暂不使用 PF_RING ZC,故不修改驱动。
进入
PF_RING-8.4.0/userland/lib/
目录。
# ./configure && make && sudo make install
进入
PF_RING-8.4.0/userland/libpcap/
目录。
xxxxxxxxxx
# ./configure && make && sudo make install
# sudo ldconfig
查看:
xxxxxxxxxx
# ldconfig -p | grep libpcap
libpcap.so.1 (libc6,x86-64) => /usr/local/lib/libpcap.so.1
libpcap.so (libc6,x86-64) => /usr/local/lib/libpcap.so
# realpath /usr/local/lib/libpcap.so
/usr/local/lib/libpcap.so.1.10.1
# realpath /usr/local/lib/libpcap.so.1
/usr/local/lib/libpcap.so.1.10.1
xxxxxxxxxx
# cat /proc/net/pf_ring/info
# ls /lib/modules/`uname -r`/kernel/net/pf_ring
# ls /lib/modules/`uname -r`/kernel/drivers/net/ethernet/intel/e1000e
进入
PF_RING-8.4.0/userland/
目录。
xxxxxxxxxx
# ./configure && make
进入
PF_RING-8.4.0/userland/examples/
目录。注意:
按需修改网卡名称
pfcount
使用 pf_ring;pcount
不使用 pf_ring使用
./pfcount -h
查看帮助信息
# sudo ./pfcount -i eth1 -v 1
# sudo ./pcount -i eth1 -v 2