dpdk pdump抓包环境搭建

  • Post author:
  • Post category:其他


intel的e1000网卡被uio驱动接管后, 在linux下通过ifconfig是看不到网卡信息的,也就无法使用tcpdump来抓包。 dpdk在16.7版本引入了pdump抓包工具,可以使用这个工具来抓包,抓到的包可以在windows下通过wireshark来分析。pdump抓包工具需要依赖libpcap和libpcap-dev两个库。 下面来看下如何安装pdump工具。


一、安装libpcap

我这里安装的libpcap版本为1.4.0, 可以在

官网

选择任意一个版本进行下载。下载好后进行解压。

root@apelife:/home/apelife/work/packet# tar -zxvf libpcap-1.4.0.tar.gz -C /home/apelife/work/bin

解压后在libpcap源码目录下执行configure 进行配置

root@apelife:/home/apelife/work/bin/libpcap# ./configure

如果出现下面这个错误,则说明缺少flex语法分析器,需要进行安装。

执行下面命令开始安装flex语法分析器。

root@apelife:/home/apelife/work/bin/libpcap# sudo apt-get install flex

安装好后重新执行./configure, 之后执行make开始编译

root@apelife:/home/apelife/work/bin/libpcap# ./configure
root@apelife:/home/apelife/work/bin/libpcap# make

如果在编译过程中出现下面这个错误,则需要安装byacc

root@apelife:/home/apelife/work/bin/libpcap# sudo apt-get install -y byacc

最后重新执行make就好了,到此libpcap安装完成。



二、安装libpcap-dev

可以直接通过apt-get install libpcap-dev来进行安装

root@apelife:/home/apelife/work/bin/libpcap# sudo apt-get install libpcap-dev


三、pdump的安装

由于在dpdk 16.7版本才引入这个pdump工具, 我就从dpdk官网下载了17.02.1版本的代码来编译。先来看下pdump整体结构。在dpdk源码目录下会有一个pdump工具的源码。

编译好pdump后,就会生成一个dpdk-pdump工具。下面开始来看下如何安装pdump

1、pdump安装目录的设置

新建一个dpdkenv文件,里面设置好dpdk需要的环境变量,其中DESTDIR为dpdk生成的一些工具目录,其中就包含了dpdk-pdump工具。 mytool是我在dpdk源码目录手动创建,我将dpdk生成的工具都放在/home/apelife/work/bin/dpdk/mytool目录

root@apelife:/home/apelife/work/bin/dpdk# cat dpdkenv 
export RTE_SDK=`pwd`
export RTE_TARGET=i686-native-linuxapp-gcc
export EXTRA_CFLAGS="-O0 -g"
export DESTDIR=/home/apelife/work/bin/dpdk/mytool

设置好环境变量后,执行source dpdkenv, 让这个文件里面设置的环境变量立即生效,而无需重启设备才生效。

2、开启编译选项

需要修改/home/apelife/work/bin/dpdk/config/common_base文件,将下面两个编译选项设置为y,使得这两个功能生效。

CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_LIBRTE_PDUMP=y

3、编译dpdk与pdump

到这个步骤,所有需要设置的操作都已经完成了。接下里就可以编译dpdk了,编译dpdk的时候会生成dpdp-pdump工具,因此dpdk-pdump这个工具无需额外编译。 dpdk两种编译方式可以参考

虚拟机dpdk环境搭建

这篇文章。例如我的ubuntun操作系统是32位的,则执行make install T=i686-native-linuxapp-gcc。编译好后,就可以在/home/apelife/work/bin/dpdk/mytool/bin生成dpdk-pdump工具


四、pdump抓包实例

在这里以l2fwd二层转发为例,看下如何抓包。简单说明下抓包原理。首先l2fwd作为主进程运行, 而dpdk-pdump做为从进程运行,两个进程通过ring队列进行通信。例如l2fwd将报文通过ring队列发给dpdk-pdump,进而可以抓包到。 详细的抓包原理在后续源码分析过程中再来详细分析,这里只需要会用就可以了。

1、修改l2fwd的源码,在rte_eal_init后面加上rte_pdump_init初始化抓包框架,使得l2fwd以主进程方式运行

2、运行l2fwd主进程

root@apelife:/home/apelife/work/bin/dpdk/examples/l2fwd# ./l2fwd -c 0xf -n 2 -- -q 2 -p 0xf

3、运行dpdk-pdump抓包进程(也就是从进程)

执行下面命令开始抓包,其中port为需要抓包的那个端口。我这个例子中指定了4个网卡,因此port的范围从0-3; queue表示抓某个网卡的某个队列(通常一个网卡有多个接收队列),如果为*则表示抓这个网卡所有队列的报文; rx-dev指定抓包存放路径。

root@apelife:/home/apelife/work/bin/dpdk/mytool/bin# ./dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/home/apelife/mypacket/dpdk.pcap'

ctrl+c停止抓包,抓到报文后,就可以把报文在windows下通过wireshark来分析。



版权声明:本文为ApeLife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。