DPDK — PDUMP 抓包工具

目錄

前文列表

DPDK — 安裝部署
DPDK — TestPMD
linux

DPDK PDUMP

pdump 庫是在 DPDK 16.07 版本引入的一個 DPDK 數據包捕獲框架(抓包工具)。由於 DPDK App 是徹底內核旁路的用戶態網絡協議棧,因此沒法使用 tcpdump 工具來進行抓包。使用 DPDK pdump 能夠用於抓取被 DPDK App 接管的指定接口、隊列的數據包。vim

安裝部署

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:app

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

運行原理

在使用 pdump 時,pdump 會做爲 「Secondary 進程」 依附於 「Primary 進程」,即 DPDK App,例如:testpmd、l2fwd、l3fwd。Primary 進程做爲 Server 端,初始化 pdump 抓包框架。而 Secondary 進程則做爲 Client 端向 Primary 進程發送 Start/Stop 抓包的請求,而後 Primary 進程會拷貝一份數據包到 Ring 中,Secondary 進程再從 Ring 中讀取出來,併發送到 pcap pmd 設備。能夠保存爲 pcap 文件,也能夠經過 Linux Console 輸出。框架

在這裏插入圖片描述

操做步驟

以 testpmd 爲例,使用 dpdk-pdump 進行抓包。socket

  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 的子參數:tcp

  • 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。
相關文章
相關標籤/搜索