-w 在做什么
-w 让 tcpdump 把捕获到的原始字节按 pcap 格式写入指定文件,而不是打印成文本。文件里保存的是从链路层开始的原样数据(受 snaplen 限制),包含全部选项字段、载荷与高精度时间戳,因此事后可用 Wireshark 做任意解码,也能用 editcap、mergecap 做切片与合并。服务器上「先落盘、再离线分析」是通行做法:抓包时不必当场判断看什么,事后可以反复换角度。
基本信息
| 用途 | 把原始报文写入 pcap 文件,供离线分析 |
|---|---|
| 语法 | tcpdump -w <文件> [选项] [过滤表达式] |
| 默认格式 | 经典 pcap;Wireshark 默认保存的是 pcapng,老工具读不了 pcapng |
| 必需搭配 | -s 0 保证抓全;-nn 省掉解析开销 |
| 停止方式 | Ctrl+C、-c 计数、-G/-W 分卷或 timeout 命令 |
典型使用场景
- 现场服务器抓包拷回本地,用 Wireshark 的图形能力细看
- 需要留证或交接:把 pcap 附到工单里,别人可复核
- 高流量口长时间抓取:用 -G 与 -W 做环形分卷,避免单文件无限增长
- 抓包机无法联网或不便交互:先落盘,再由 tshark、mergecap 批处理
- 与业务时间对齐:抓包文件按现场时间命名,方便与日志比对
常用示例
常用示例
tcpdump -i eth0 -nn -s 0 -w /tmp/issue.pcap 'host 10.0.0.9 and port 443' # 单文件全量落盘
tcpdump -i any -s 0 -w /tmp/web.pcap 'tcp port 80 or tcp port 443' # 多端口一起抓
tcpdump -i eth0 -w /tmp/roll.pcap -G 300 -W 12 -s 0 'port 3306' # 每 300 秒分一卷,最多 12 卷循环
tcpdump -i eth0 -w /tmp/only.pcap -C 100 'port 443' # 每 100MB 分卷
timeout 120 tcpdump -i any -s 0 -w /tmp/win.pcap 'udp port 53' # 两分钟后自动结束
chown ops:ops /tmp/issue.pcap # 拷给分析同事前处理属主
scp /tmp/issue.pcap analyst@10.0.0.20:/data/pcap/ # 传到分析机
editcap -F pcapng /tmp/issue.pcap /tmp/issue.pcapng # 需要 pcapng 时转格式配套选项
| 选项 | 作用 | 使用建议 |
|---|---|---|
| -s 0 | 不截断,抓完整报文 | 排查应用层问题必加 |
| -G <秒> | 按时间滚动生成新文件 | 长时间抓取配合 -W 限卷数 |
| -W <数量> | 配合 -G/-C 限制文件数量,写满后回卷覆盖 | 卷数与单卷大小要算好总占用 |
| -C <MB> | 按文件大小分卷 | 适合估算磁盘余量的场景 |
| -z gzip | 写完后交给 gzip 压缩 | 文本类协议压缩率可观 |
默认 snaplen 未必等于完整报文,各版本取值也不同。需要分析载荷时明确写 -s 0,否则事后在 Wireshark 里会看到 Packet size limited during capture 的截断提示。
-w 与 -A/-X 这类打印选项互斥:一旦写了 -w,输出就只有 pcap 二进制。需要在抓包同时看摘要,就同时开 -w 和若干 -c,或者先抓后读。
回读与验证
回读与验证
capinfos /tmp/issue.pcap # 看包数、时长、是否有截断
mergecap -w /tmp/all.pcap /tmp/*.pcap # 把分卷合并成一个文件
tshark -r /tmp/issue.pcap -Y 'http.response.code >= 500' | head # 用显示过滤器筛回读内容场景与参数组合
| 场景 | 建议参数 | 选择原因 |
|---|---|---|
| 短时复现单次故障 | -s 0 加 -c 上限写单文件 | 样本够用就停,避免留下占空间的大文件 |
| 长时间盯一个端口 | -G 与 -W 做环形分卷,再加 timeout | 写满自动回卷覆盖,总占用可控不会写满磁盘 |
| 排查应用层内容 | 显式写 -s 0 | 默认快照长度可能截断载荷,事后无法还原 |
| 高并发大流量口 | 先加主机或端口过滤再落盘 | 全量抓取会让磁盘与抓包进程同时成为瓶颈 |
| 交接给他人分析 | 停止后改属主再拷贝,附抓包时间与接口名 | 对方要知道抓包点位置才能正确解读报文方向 |
| 与业务日志交叉比对 | 文件名带现场时间,抓包机与业务机校时 | 时钟不同步时无法把抓包与日志对齐到同一时刻 |
命名与归档习惯
- 文件名带业务名与现场时间,事后不必靠回忆确认这份文件是哪个故障的
- 抓包前记录接口名、抓包点位置与当时客户端地址,这三项决定报文方向怎么读
- 分卷文件先用 mergecap 合并再分析,避免只看其中一段就下结论
- 归档前用 capinfos 核对包数与时长,防止把空文件或不完整文件交出去