输出详略按需切换
tcpdump 默认只打印协议头的主干字段,遇到需要看时间、看链路层、看载荷的场景就要显式切换输出格式。详细级别选项逐级增加协议细节,链路层选项把媒体访问控制地址打出来,载荷选项则按字符或十六进制展示正文。同一份流量用不同格式看,得到的信息量与可读性完全不同,选错格式要么漏信息,要么满屏噪声看不出重点。
基本信息
| 适用平台 | Linux、macOS、BSD 的 tcpdump(libpcap) |
|---|---|
| 详细级别 | -v、-vv、-vvv 逐级增加协议细节 |
| 链路层 | -e 打印链路层头,含地址信息 |
| 载荷显示 | -A 按字符打印,-X 十六进制加字符 |
| 精简输出 | -q 减少信息输出,适合大批量统计 |
典型使用场景
- 确认生存时间与窗口是否被中间设备改写:加详细级别看字段
- 核对链路层地址与虚拟局域网标签:用链路层选项抓现场证据
- 查看明文协议内容:按字符打印请求行与响应头
- 排查二进制协议:用十六进制方式确认字段取值
- 统计大量包:用精简输出降低噪声,只关心计数
输出格式切换
输出格式切换
tcpdump -nn -i eth0 -c 5 -v tcp port 443 # 生存时间、窗口与选项
tcpdump -nn -e -i eth0 -c 5 arp # 带链路层地址
tcpdump -nn -A -i eth0 -c 20 'tcp port 80' # 按字符打印正文
tcpdump -nn -X -i eth0 -c 5 'udp port 53' # 十六进制加字符
tcpdump -nn -q -i eth0 -c 1000 | tail -3 # 精简输出跑量
tcpdump -nn -i eth0 -c 5 -vv 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' # 握手细节选项与增量信息
| 选项 | 增加的信息 | 适用场景 |
|---|---|---|
| -v / -vv / -vvv | 逐级增加协议细节 | 看选项字段与校验结果 |
| -e | 链路层头,含地址 | 核对地址与标签 |
| -A | 载荷按字符打印 | 明文协议内容 |
| -X | 载荷十六进制加字符 | 二进制协议字段 |
| -q | 输出更少 | 大批量统计 |
| -c N | 限制包数 | 先看样本再决定范围 |
用按字符方式看明文协议最直观;二进制协议要用十六进制方式才能确认关键字段,否则只能看到乱码。
输出格式与抓包长度是两件事:格式选项决定打印多少,快照长度决定实际抓了多少字节,载荷被截断时格式选项也救不回来。