如何利用Ubuntu Dumpcap进行故障排查
导读:Ubuntu 下使用 Dumpcap 进行故障排查 一 安装与权限准备 安装工具:在 Ubuntu 上安装 Wireshark 包即可获得 dumpcap(命令行抓包引擎)。执行:sudo apt update && s...
Ubuntu 下使用 Dumpcap 进行故障排查
一 安装与权限准备
-
安装工具:在 Ubuntu 上安装 Wireshark 包即可获得 dumpcap(命令行抓包引擎)。执行:
sudo apt update & & sudo apt install wireshark。安装过程中会出现是否允许非 root 抓包的选项,建议选择 Yes,这会自动创建 wireshark 用户组并将当前用户加入该组。完成后需重新登录或执行newgrp wireshark使组权限生效。若已安装但仍提示无权限,可检查组成员:groups $USER。不建议长期使用sudo wireshark或sudo dumpcap运行图形界面或命令行抓包。 -
权限模型(二选一,推荐能力机制):
- 能力机制(更安全、最小权限):为 /usr/bin/dumpcap 授予抓包所需能力,使普通用户可直接抓包:
sudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/bin/dumpcap。如需验证:getcap /usr/bin/dumpcap。该方式无需将用户加入特殊组,也不改变二进制文件的属主/模式。 - 组权限机制(传统做法):将用户加入 wireshark 组(安装时若已选择 Yes 通常已完成),并确保 dumpcap 可被该组执行:
sudo chgrp wireshark /usr/bin/dumpcap & & sudo chmod 4755 /usr/bin/dumpcap,随后将当前用户加入组:sudo usermod -aG wireshark $USER并重新登录。注意使用 4755 的 setuid 位,确保组成员具备必要能力。
- 能力机制(更安全、最小权限):为 /usr/bin/dumpcap 授予抓包所需能力,使普通用户可直接抓包:
二 快速定位与抓包命令
- 选择接口:先查看可用接口:
dumpcap -D(如 eth0、wlan0、lo)。接口名需与系统实际一致。 - 基本抓包:抓取指定接口全量包并写入文件(建议先小文件验证):
dumpcap -i eth0 -w capture.pcap。如需抓取完整链路层内容:dumpcap -i eth0 -s 0 -w capture.pcap(-s 0 表示 snaplen 不截断)。 - 显示过滤器与捕获过滤器:
- 捕获过滤器(BPF,减少内核到用户态的数据量):
dumpcap -i eth0 -f "tcp port 80 or tcp port 443" -w http_https.pcap - 显示过滤器(Wireshark 语法,供后续分析用):
dumpcap -i eth0 -w capture.pcap 'ip.addr == 192.168.1.100'提示:过滤器字符串包含空格或特殊字符时,务必用单引号包裹,避免被 shell 解析。
- 捕获过滤器(BPF,减少内核到用户态的数据量):
- 环形缓冲与自动分段:长时间抓包建议开启分段,避免单个文件过大:
dumpcap -i eth0 -w trace.pcap -a filesize:100000 -a files:10(单个文件约 100MB,最多 10 个文件,自动循环覆盖)。 - 实时查看:将抓包直接送入 Wireshark 分析:
dumpcap -i eth0 -w - | wireshark -r -(适合临时交互分析)。 - 多接口同时抓包:
dumpcap -i eth0 -i wlan0 -w multi.pcap(便于排查跨接口问题,如 ARP、NAT、桥接)。
三 典型故障排查场景与命令示例
- 丢包或时延抖动(TCP 重传、乱序、零窗口):定位问题主机或方向的流量。
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 等事件。 - DNS 解析异常:聚焦 UDP/TCP 53 与响应状态。
dumpcap -i eth0 -f "udp port 53 or tcp port 53" -w dns.pcap;分析 SERVFAIL、REFUSED、NXDOMAIN 及响应时延。 - DHCP 获取不到地址:观察 UDP 67/68 的 Discover/Offer/Request/ACK 交互。
dumpcap -i eth0 -f "udp port 67 or udp port 68" -w dhcp.pcap;检查是否缺少 Offer 或超时。 - ARP 异常(IP 冲突、网关不可达):
dumpcap -i eth0 -f "arp" -w arp.pcap;查看 ARP 请求/响应是否匹配、是否存在重复 MAC。 - 仅本地回环问题:
dumpcap -i lo -w loopback.pcap(排查本机进程间通信、服务监听与回环连通性)。 - 虚拟机或容器场景:确保虚拟网卡(如 veth、tap)或宿主机桥接接口处于混杂模式且可被访问;在宿主机上抓对应 veth 或对 br0 抓包以观察南北向与东西向流量。
四 常见问题与排错要点
- 权限被拒或 “couldn’t run dumpcap in child process”:优先检查当前用户是否在 wireshark 组并重新登录;若仍失败,改用能力机制:
sudo setcap 'cap_net_raw,cap_net_admin+eip' /usr/bin/dumpcap,再验证getcap输出。避免使用sudo wireshark作为常规手段。 - 找不到接口或接口状态异常:执行
dumpcap -D确认名称;无线接口需处于监控模式才可抓取管理/控制帧(抓取 802.11 管理帧需专用无线驱动与支持)。 - 抓不到预期流量:核对 BPF 捕获过滤器语法(如端口、方向、主机);确认未在错误的 VLAN/网桥/隧道 上抓包;必要时扩大抓包范围(如从
host x改为net x/24)。 - 文件过大或磁盘占满:使用 -a filesize: 与 -a files: 实现环形缓冲;定期清理或转存分析。
- 抓包性能与丢包:适当增大内核环形缓冲(如
-B 1048576或更高),减少显示过滤在抓包阶段的开销(尽量用 -f 过滤),并避免在高负载接口上无过滤抓全量。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何利用Ubuntu Dumpcap进行故障排查
本文地址: https://pptw.com/jishu/760504.html
