目录

文章目录

  • 目录
  • 前文列表
  • DPDK PDUMP
  • 安装部署
  • librte_pdump 库
  • 运行原理
  • PDUMP 的工作流程
  • 操作步骤
  • dpdk-pdump 指令
  • Use the Data Plane Development Kit Pdump Feature with Open vSwitch*

前文列表

《DPDK — 安装部署》
《DPDK — TestPMD》

DPDK PDUMP

librte_pdump 库是在 DPDK 16.07 版本引入的一个 DPDK 数据包捕获开发框架,dpdk-pdump Tool 就是基于 librte_pdump 库开发出来的 DPDK App 抓包工具。因为 DPDK App 是完全内核旁路(Kernel-bypass)的用户态网络协议栈,所以无法使用 tcpdump 工具来进行抓包。使用 dpdk-pdump 可以用于抓取被 DPDK App 接管的指定接口、队列的数据包。

官方文档:http://doc.dpdk.org/guides/howto/packet_capture_framework.html

安装部署

DPDK PDUMP 依赖基于 libpcap 的 PMD 驱动,需要预先安装:

  • libpcap 网络数据包捕获函数库(A system-independent interface for user-level packet capture)。
  • libpcap-devel 用于编译和使用基于 libcap 的 PMD 轮询模式驱动程序。
yum install -y libpcap.x86_64 libpcap-devel.x86_64

默认情况下,该驱动程序被禁用,需要通过修改 Target Env 的配置文件来开启:

$ vim dpdk-18.08/x86_64-native-linuxapp-gcc/.config
CONFIG_RTE_LIBRTE_PMD_PCAP=y
CONFIG_RTE_LIBRTE_PDUMP=y$ make

最后再安装 pdump:

$ cd dpdk-18.08/app/pdump
$ make && make install

librte_pdump 库

Server 端:

  • rte_pdump_init():初始化 PDUMP 抓包框架,并创建线程和 Server Socket。Socket 在线程里监听 Client Start/Stop 抓包的请求。
  • rte_pdump_uninit():清理退出 PDUMP 抓包框架,并关闭线程和 Server Socket。

Client 端:

  • rte_pdump_enable():在一个端口队列开启抓包。
  • rte_pdump_enable_by_deviceid():在一个设备 ID(vdev 名称或者 PCI 地址)和队列抓包。

每调用一次这两个 API,PDUMP 库就会创建一个独立的 Client Socket,并发送 pdump enable 的请求到 Server。Server 监听到这个请求就会通过给定的端口或者设备 ID 以及队列的组合,在 Ethernet RX/TX 注册回调函数,之后 Server 就会镜像数据包到一个新的内存池,并将让它们在 Client 传入的 rte_ring 队列上入队。Server 会发送响应给 Client 关于请求处理的状态。在收到 Server 的回应后,Client 的 Socket 就关闭了。

  • rte_pdump_disable():在一个端口队列停止抓包。
  • rte_pdump_disable_by_deviceid():停止在一个设备 ID(vdev 名称或者 PCI 地址)和队列抓包。

每调用一次这两个 API,PDUMP 库就会创建一个独立的 Client Socket,并发送 pdump disable 的请求到 Server。Server 监听到这个请求就会通过给定的端口或者设备 ID 以及队列的组合,在 Ethernet RX/TX 删除回调函数,之后 Server 就会镜像数据包到一个新的内存池,并将让它们在 Client 传入的 rte_ring 队列上入队。Server 会发送请求回应给 Client 关于请求处理的状态。在收到 Server 的回应后,Client 的 Socket 就关闭了。

  • rte_pdump_set_socket_dir():设置 Server 或 Client 的 Socket 文件的路径。注意,这个接口是非线程安全的,并在 DPDK 18.05 版本移除。

运行原理

在使用 dpdk-pdump 时,dpdk-pdump 会作为 Secondary(从)进程,并依附于 Primary(主)进程,即 DPDK App,例如:testpmd、l2fwd、l3fwd。Primary 进程作为 Server 端,需要 include rte_pdump 库进行开发,初始化 PDUMP 抓包框架。Secondary 进程作为 Client 端,同样需要 include rte_pdump 库进行开发,通过标准接口向 Primary 进程发送 Start/Stop 抓包的请求,然后 Primary 进程会拷贝一份数据包到 Ring 中,Secondary 进程再从 Ring 中读取出来,并发送到 PCAP PMD 设备。可以保存为 pcap 文件,或发送至 Linux Console 等外部接口输出。

注意:因为 dpdk-pdump 抓包存在报文 Copy 的过程,所以对性能会有影响,建议仅在 DEBUG 时使用。

PDUMP 的工作流程

  1. DPDK App 采用 rx-worker-tx 的模型进行报文的处理,其中调用 rte_pdump_init 会启动 dump_thread;
  2. dpdk-pdump 采用 secondary 模式启动,与 App 共享 mmap 映射的内存空间;
  3. dodk-pdump 启动过程中会创建 mbuf_pool 和 ring,用于后续接收 App 中报文的拷贝;
  4. dpdk-pdump 会通过 rte_eth_dev_attach 方式创建 vdev,且采用 eth_pcap 驱动进行初始化,留意 init 中的 open_tx_pcap;
  5. dpdk-pdump 向 App 发送开启抓包的消息(UDP 方式),消息内容为前面创建的 mbuf_pool、ring 以及抓包的 Port 和对应的 Queue;
  6. App 中的 dump_thread 收到消息后,获取相应信息,在 Port 上注册 call_back 函数;
  7. 对于开启抓包的 Port,在 rx_burst/tx_burst 时会先调用 call_back(回调函数),这里对应 pdump_rx/pdump_tx,它会由 mbuf_pool 中分配 mbuf 进行报文的复制,同时 enqueue 到 ring 中;(mbuf_pool 和 ring 在步骤 3 中创建,在步骤 5 中传递给 App);
  8. dpdk-pdump 进行 ring 的 dequeue 操作获取拷贝报文;
  9. 拷贝报文通过 rte_eth_tx_burst 发送给 vdev;
  10. vdev 通过 eth_pcap 的 tx_pkt_burst 发送报文,即调用 eth_pcap_tx_dumper 完成报文的 pcap 存储(pcap_dump)。

操作步骤

以 testpmd 为例,使用 dpdk-pdump 进行抓包。

  1. 启动 testpmd 作为 Primary 进程
$ ./testpmd -l 1,2,3 --socket-mem 1024 -n 4 --log-level=8 -- -i
  1. 启动 dpdk-pdump 作为 Secondary 进程
$ ./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/capture.pcap'
  1. 查看 pcap 文件
$ tcpdump -nr /tmp/capture.pcap

dpdk-pdump 指令

./build/app/dpdk-pdump -- --pdump '(port=<port id> | device_id=<pci id or vdev name>), (queue=<queue_id>), (rx-dev=<iface or pcap file> | tx-dev=<iface or pcap file>), [ring-size=<ring size>], [mbuf-size=<mbuf data size>], [total-num-mbufs=<number of mbufs>]' [--server-socket-path=<server socket dir>] [--client-socket-path=<client socket dir>]
  • –pdump:是必选的,多个 --pdump 可以用于捕获不同的接口和队列
  • –server-socket-path:是可选的,指定 Server socket 的目录。root 用户就默认为 /var/run/.dpdk/,非 root 用户默认为 ~/.dpdk/。
  • –client-socket-path:是可选的,指定 Client Socket 的目录。root 用户就默认为 /var/run/.dpdk/,非 root 用户默认为 ~/.dpdk/。

–pdump 的子参数:

  • port:需要被抓包的以太网 Port id。
  • device_id:需要被抓包的以太网 PCI 设备的 id。
  • queue:需要被抓包的以太网 PCI 设备的 Queue id,* 表示所有队列。
  • rx-dev:入口方向被抓取的报文,参数应该是一个 pcap 文件名或者 Linux 接口。
  • tx-dev:出口方向被抓取的报文,参数应该是一个 pcap 文件名或者 Linux 接口。

NOTE:如果两个方向都分别要,tx-dev 与 rx-dev 应该被同时指定两个不同的文件或者接口;如果两个方向都同时要,tx-dev 与 rx-dev 应该指定相同的文件或接口。

  • ring-size:指定用于存储数据包的 Ring 的大小,默认是16384。用于主程序向抓包程序入队用的。

  • mbuf-sizze:MBuf Data 的 大小,用于 mempool 的创建,默认是2176。用于入队列的mbuf用的。用于主程序向抓包程序传数据用的。

  • total-num-mbufs:指创建 mbug 的个数,默认值为 65535。

  • –server-socket-path 和 --client-socket-path 用于指定 Server 和 Client 之间进行通信的 Socket 路径。默认的,DPDK App 的 Socket 路径为 /var/run/dpdk/rte/,但是在多 DPDK App 进行的环境中,可能回味每个 DPDK App 指定不同的路径,从而隔离开配置空间。此时就需要使用 --server-socket-path 来指定特定 DPDK App 的配置路径了。

注意:DPDK 18.05 后把 rte_pdump_set_socket_dir() 函数移除了,所以 --server-socket-path 是不生效的,依旧会到 /var/run/dpdk/rte 路径下读取配置和 Socket 文件。

Use the Data Plane Development Kit Pdump Feature with Open vSwitch*

https://software.intel.com/content/www/us/en/develop/articles/dpdk-pdump-in-open-vswitch-with-dpdk.html

DPDK — PDUMP 抓包工具相关推荐

  1. Linux抓包工具tcpdump详解

    原文链接 tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. ...

  2. python抓包工具_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...

    挑选常用的功能给各位老铁介绍下. fiddler第一次进入fiddlerfiddler会请求fiddler的官网,检查更新操作布局分布 工具栏File -capture traffic开启爬虫File ...

  3. Fiddler抓包工具总结(转)

    序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...

  4. Wireshark抓包工具使用教程以及常用抓包规则

    Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的,所以今天讲述的内容可能无法直接帮你解决问题,但 ...

  5. Charles是mac的iddler抓包工具

    windows下面我们经常使用 Fiddler 抓包工具进行代理等一系列操作.然而,在 Mac 下 http://en.softonic.com/s/java-se-6:mac

  6. MySQL抓包工具:MySQL Sniffer

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...

  7. 抓包工具tcpdump及分析工具wireshark

    一.抓包工具tcpdump tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问 ...

  8. charles 安装 ssl_前端开发如何使用抓包工具 charles

    抓包工具 https://www.charlesproxy.com/latest-release/download.do charles 官网 一. 安装 1. 下载 (自行根据系统下载对应软件) 打 ...

  9. mac下的抓包工具Charles

    2019独角兽企业重金招聘Python工程师标准>>> 在mac下面,居然没有好的抓包工具,这让我十分纠结,毕竟不可能为了抓一个http包就跑到win下折腾.或许有人说tcpdump ...

最新文章

  1. php如何定义url,使用自定义函数作为URL规则
  2. LeetCode Binary Tree Inorder Traversal
  3. 过滤器实例——字符编码Filter
  4. android 9patch 漏洞,Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)
  5. 表达式类型( 一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现 基于二叉树表示的算术表达式Expression的操作)
  6. 浅析:浅拷贝 及 深拷贝的传统写法
  7. vb excel 连续多个值赋值_VB实现向数组中插入元素
  8. 20130828 到底我能赚多少钱?
  9. python xy 2.7下载_pythonxy 安装
  10. 云计算与大数据——数据挖掘常用算法
  11. 单系统 台电x80pro_台电X80 Pro (E6E9)-双系统安装文件平板固件
  12. Spring Boot 2 精髓学习笔记(五)---Beetl 模板引擎(1)
  13. 调用百度人体关键点识别API
  14. 15款免费WiFi入侵破解安全测试工具
  15. Hadoop精华问答 | 基于Hadoop的数据中心有什么好处?
  16. amd的5700g无法进入系统和pe(锁四个核心可进入)
  17. 12306订票助手 (版本 3.5.0)
  18. php动态网站考试题,PHP动态网站设计与开发期末考试A卷
  19. 极光开发者周刊【No.0423】
  20. javaIO学习下:javase学习(三)

热门文章

  1. centos7升级python到3_CentOS7 升级Python2.x到3.x
  2. html5 居于页面中心,css笔记:如何让一个div居于页面正中间
  3. 两个unit取和会溢出吗_TCP 三次握手原理,你真的理解吗?
  4. c语言编译时字符黑色,C语言黑与白问题
  5. 2020中国年度AI评选结果揭晓!领航企业、商业人物、创新产品……AI落地最佳参考就在这里...
  6. SpaceX星舰飞船又炸了,马斯克迷惑表态:成功了!火星等我
  7. 训练、标注成本节省90%!华为云自动化AI开发平台ModelArts 3.0发布,从训练数据到模型落地一站式打通...
  8. 一文看懂国产最大深度学习平台上新:35项全面升级,国内率先加持量子机器学习...
  9. 李飞飞、邓中翰当选美国国家工程院院士
  10. Pandas循环提速7万多倍!Python数据分析攻略