最近項目需要高性能的抓包工具巷折,找到了Intel開發(fā)的DPDK框架以及開源項目PcapPlusPlus,以下記錄一下從源碼編譯到運行例子的踩坑之路
環(huán)境:vmware15 + ubuntu16.04 + DPDK18.02 + PcapPlusPlus
DPDK配置與編譯
下載DPDK
由于截止本文寫作的時候徒爹,PcapPlusPlus的抓包功能最高只支持DPDK18.02版本,更高的版本在編譯時會報錯找不到頭文件河绽。DPDK18.02.2
配置libpcap
由于DPDK抓包需要libpcap返劲,下載并解壓libpcap。
按照文檔安裝后窟蓝,需要將/usr/lib
和/usr/local/lib
加入/etc/ld.so.conf
文件中罪裹,并用ldconfig
命令重置鏈接庫的緩存,否則后續(xù)編譯可能會發(fā)生找不到pcap.h文件的錯誤。
配置大內(nèi)存頁
用root用戶執(zhí)行以預留大內(nèi)存頁状共,此處分配的是2M的大內(nèi)存頁
hugepages=1024
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
讓DPDK使用大內(nèi)存頁套耕,同樣用root用戶執(zhí)行
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
配置DPDK編譯目標
DPDK支持多種平臺(x86、x64峡继、ARM)冯袍,編譯的目標由ARCH-MACHINE-EXECENV-TOOLCHAIN
給出
ARCH
can be:i686
,x86_64
,ppc_64
,arm64
MACHINE
can be:native
,power8
,armv8a
EXECENV
can be:linuxapp
,bsdapp
TOOLCHAIN
can be:gcc
,icc
在我的環(huán)境下,選擇x86_64-native-linuxapp-gcc
# 配置編譯目標
make config T=x86_64-native-linuxapp-gcc
# 編譯
make
配置PcapPlusPlus
下載PcapPlusPlus
https://github.com/seladb/PcapPlusPlus
編譯配置
運行PcapPlusPlus根目錄下的configure-linux.sh碾牌,配置抓包方式為DPDK
運行setup-dpdk.sh綁定網(wǎng)卡設備到DPDK驅(qū)動康愤,這會使linux內(nèi)核喪失對該網(wǎng)卡的驅(qū)動,單網(wǎng)卡的情況下會斷網(wǎng)
編譯
make all
就好
運行PcapPlusPlus的樣例程序
https://github.com/seladb/PcapPlusPlus/tree/master/Examples/DpdkExample-FilterTraffic
該樣例程序使用DPDK抓包舶吗,并設置了基本的過濾選項
在虛擬機環(huán)境下征冷,可能會出現(xiàn)EAL: Error reading from file descriptor 9: Input/output error
錯誤,這是由于VMWare的虛擬網(wǎng)卡的問題誓琼。參考這里解決资盅。