Ubuntu 下使用 Dumpcap 进行故障排查
一 安装与权限准备
安装工具:在 Ubuntu 上安装 Wireshark 包即可获得 dumpcap(命令行抓包引擎)。执行:sudo apt update && sudo apt install wireshark。安装过程中会出现是否允许非 root 抓包的选项,建议选择 Yes,这会自动创建 wireshark 用户组并将当前用户加入该组。完成后需重新登录或执行 newgrp wireshark 使组权限生效。若已安装但仍提示无权限,可检查组成员:groups $USER。不建议长期使用 sudo wireshark 或 sudo dumpcap 运行图形界面或命令行抓包。
权限模型(二选一,推荐能力机制):
sudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/bin/dumpcap。如需验证:getcap /usr/bin/dumpcap。该方式无需将用户加入特殊组,也不改变二进制文件的属主/模式。sudo chgrp wireshark /usr/bin/dumpcap && sudo chmod 4755 /usr/bin/dumpcap,随后将当前用户加入组:sudo usermod -aG wireshark $USER 并重新登录。注意使用 4755 的 setuid 位,确保组成员具备必要能力。二 快速定位与抓包命令
dumpcap -D(如 eth0、wlan0、lo)。接口名需与系统实际一致。dumpcap -i eth0 -w capture.pcap。如需抓取完整链路层内容:dumpcap -i eth0 -s 0 -w capture.pcap(-s 0 表示 snaplen 不截断)。dumpcap -i eth0 -f "tcp port 80 or tcp port 443" -w http_https.pcapdumpcap -i eth0 -w capture.pcap 'ip.addr == 192.168.1.100'
提示:过滤器字符串包含空格或特殊字符时,务必用单引号包裹,避免被 shell 解析。dumpcap -i eth0 -w trace.pcap -a filesize:100000 -a files:10(单个文件约 100MB,最多 10 个文件,自动循环覆盖)。dumpcap -i eth0 -w - | wireshark -r -(适合临时交互分析)。dumpcap -i eth0 -i wlan0 -w multi.pcap(便于排查跨接口问题,如 ARP、NAT、桥接)。三 典型故障排查场景与命令示例
dumpcap -i eth0 -f "host 10.0.0.10 and (tcp port 80 or tcp port 443)" -w host10_http.pcap;随后用 Wireshark 检查 TCP Retransmission、Duplicate ACK、Zero Window 等事件。dumpcap -i eth0 -f "udp port 53 or tcp port 53" -w dns.pcap;分析 SERVFAIL、REFUSED、NXDOMAIN 及响应时延。dumpcap -i eth0 -f "udp port 67 or udp port 68" -w dhcp.pcap;检查是否缺少 Offer 或超时。dumpcap -i eth0 -f "arp" -w arp.pcap;查看 ARP 请求/响应是否匹配、是否存在重复 MAC。dumpcap -i lo -w loopback.pcap(排查本机进程间通信、服务监听与回环连通性)。四 常见问题与排错要点
sudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/bin/dumpcap,再验证 getcap 输出。避免使用 sudo wireshark 作为常规手段。dumpcap -D 确认名称;无线接口需处于监控模式才可抓取管理/控制帧(抓取 802.11 管理帧需专用无线驱动与支持)。host x 改为 net x/24)。-B 1048576 或更高),减少显示过滤在抓包阶段的开销(尽量用 -f 过滤),并避免在高负载接口上无过滤抓全量。