抓包工具dumpcap

说明

  • 请用户先参见安装抓包工具后再参考本章节进行使用。
  • K-NET使用的DPDK版本必须与抓包依赖的DPDK版本保持一致。当前仅支持21.11.7版本,该程序会随版本变更,需确保在正确版本下使用抓包工具。
  • SP670网卡用户抓包时需要使用LD_PRELOAD=/usr/lib64/librte_net_hinic3.so

抓包工具保留说明

保留原因

K-NET保留抓包工具dumpcap的主要原因是为了支持网络故障诊断和性能分析:

  • 网络故障定位:当业务出现网络连接问题、数据包丢失、建链失败等异常情况时,抓包工具可以帮助运维人员捕获并分析网络流量,快速定位问题根因。
  • 性能分析:通过分析捕获的数据包,可以评估网络延迟、吞吐量、协议效率等性能指标,为性能优化提供数据支撑。

使用场景

抓包工具仅限以下授权场景使用:

  • 问题排查阶段:在明确的网络故障或性能问题发生时,由运维人员使用。
  • 测试验证阶段:在测试环境中进行功能验证、性能测试或兼容性测试。

安全风险

抓包工具仅抓取报文头,不涉及敏感信息获取。

命令格式

LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap [-D] [-h] [-i <pci_bdf_port>] [-c <packet_num_>] [-f "<filter expression>"] [-w <file_name>] [-a <stop_condition>_][-g] [-n] [-q] [-v] [-d] [-s] [-p] [-P]

参数说明

高频参数说明

选项 是否必选 说明
-D 显示可用PCI网口。
-h 使用帮助信息。
-i <pci_bdf_port> 抓取精确指定网口的数据包。例如:-i 0000:06:00.0。不加-i则查找默认的一个DPDK接管网口。
-c <packet_num> -c 6000:统计6000包后结束。例如:-c 6000。
-w <file_name> -w ./tx.pcap:将文件写入到当前目录的tx.pcap文件中。例如:-w ./tx.pcap

若未指定文件路径,默认写入/tmp目录,例如/tmp/dumpcap_xxxx.pcap

-f <filter_expression> -f "host 192.168.1.1 || port 6390":抓取数据包中有192.168.1.1或者端口为6390的数据包。

其他参数说明

选项 是否必选 说明
-a <stop_condition> -a 100,例如抓取100kB的包停止,-a filesize:100
-g 支持linux群组用户访问抓包文件。
-q 不报告抓包数量。
-v 版本信息。
-d 打印过滤条件码。
-s 抓包大小,该参数对K-NET应用不可用,因此出于安全起见,K-NET仅会抓取数据包头。
-p 默认配置参数,关闭混杂。
-P 默认配置参数,抓包文件格式pcap。
-n 未使用,是预留参数。

使用示例

说明

使用抓包前请先启动K-NET。抓包工具启动前已经运行的业务进程才能被抓包,如果新增业务进程,请重启抓包工具。业务启动命令参见特性指南中各功能示例。

  • 进入“dpdk-stable-21.11.7/app/dumpcap”目录再使用抓包定位K-NET劫持的业务。

    LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap -w /home/KNET_USER/tx.pcap # 使用默认DPDK接管网口,抓取K-NET业务数据包,写入/home/KNET_USER用户目录下,文件名为tx.pcap
    LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap -w /home/KNET_USER/tx.pcap -f "host 192.168.1.11 && port 6380" # 使用默认DPDK接管网口,在以上条件基础上新增host和port过滤条件, 192.168.1.11为抓包想要过滤的主机IP地址,6380为想要过滤主机的端口
    
  • 如果dumpcap被意外终止,例如被执行pkill -9 dumpcappkill dumpcap命令。为了恢复使用,请启动-关闭-重启dumpcap,以恢复抓包定位能力。

    以下是意外终止并恢复模拟:

    pkill -9 dumpcap
    LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap -w /home/KNET_USER/tx.pcap # 第一次启动
    

    “Ctrl+C”正常退出:

    LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap -w /home/KNET_USER/tx.pcap # 重启后恢复
    

获取网络包

  1. 确保已完成配置大页内存,并在“dpdk-stable-21.11.7/app/dumpcap”目录执行下列操作可开启K-NET抓包。

    chmod a+s /usr/lib64/librte_net_hinic3.so 
    setcap cap_sys_rawio,cap_dac_read_search,cap_sys_admin+ep dumpcap  
    LD_PRELOAD=/usr/lib64/librte_net_hinic3.so ./dumpcap -w /home/<username>/tx.pcap
    
  2. 抓包完成后,“Ctrl + C”结束,在/home/<username>/下生成tx.pcap。

  3. 可使用tcpdump -r /home/<username>/tx.pcap -v查看抓包文件或使用Wireshark打开查看。

  4. 使用tcpdump -r /home/<username>/tx.pcap读取数据包,查看数据包详情,操作示例如下:

    • 正常情况应该有ARP建链包,如上图存在ARP请求和回应。
    • 若存在无法建链、丢包、无法接收数据包等异常情况,请先在ping场景下抓包测试,确保网络链路正常,进一步再通过数据包细节排查。