落盘与离线分析
生产问题的抓包机会往往只有一次:把它写在磁盘上,再离线慢慢分析,比在终端里盯着一屏一屏刷过去的报文可靠得多。写入文件时必须只写不打印,否则两类输出会互相干扰;同时要保证抓取长度足够,避免报文内容被截断。抓到之后可以用命令行回读并叠加过滤条件,也可以交给图形化工具做会话重组与统计。
基本信息
| 核心思路 | 现场一次抓取,事后反复分析;文件可跨机器共享复核 |
|---|---|
| 常用开关 | -w 写入文件、-r 回读并过滤、-s 设置抓取长度、-U 立即刷盘、-C 与 -W 做分卷 |
| 注意冲突 | 写入文件时不要再叠加打印类选项,二者目的冲突 |
| 容量预估 | 高带宽网卡全速抓包几分钟即可写出几十吉字节,务必提前估算 |
| 命名建议 | 文件名带上时间与故障标识,便于后续检索与归档 |
典型使用场景
- 复现期抓包:故障窗口短,先挂上抓包等它再次出现
- 长期观测:用分卷参数把长时间抓包切成多个可控大小的文件
- 跨团队协作:把文件交给网络或厂商侧用图形化工具体会诊
- 复核争议:双方基于同一份文件讨论,避免各说各话
- 边抓边看:用立即刷盘配合流式读取,兼顾实时性与留档
落盘与回读
落盘与回读
tcpdump -i eth0 -s 0 -nn -w /tmp/issue-$(date +%F-%H%M).pcap 'host 10.0.0.5'
# 复现期挂着抓,Ctrl+C 停止
tcpdump -nn -r /tmp/issue-2026-10-12-1030.pcap | head -50 # 回读前 50 个包
tcpdump -nn -r /tmp/issue.pcap 'tcp port 443' -c 5 # 回读时再叠加端口过滤
tcpdump -nn -r /tmp/issue.pcap -w /tmp/only443.pcap 'tcp port 443' # 过滤后另存一份小文件
# 分卷抓包:每 100MB 一卷,最多保留 20 卷
tcpdump -i eth0 -nn -s 0 -C 100 -W 20 -w /tmp/roll.pcap 'port 3306'参数与效果
| 参数 | 作用 | 实践建议 |
|---|---|---|
| 写入文件 | 把原始报文保存为抓包文件 | 不要与打印类选项同时使用 |
| 设置抓取长度为零 | 抓取完整报文而不截断 | 需要分析内容时必加 |
| 立即刷盘 | 包缓冲立刻写入磁盘 | 边抓边看时使用,会增加磁盘写入 |
| 分卷与卷数 | 按大小切分文件并限制保留卷数 | 长时间抓包的必备组合 |
| 回读加过滤 | 读取文件时再应用过滤条件 | 先用大范围抓、再用小范围读 |
回读时可以叠加新的过滤条件,所以现场抓包不必追求过滤精准:抓全一点,事后再筛,比漏抓关键报文要好得多。
抓包文件是二进制格式,不要用文本方式打开或编辑,分析请用回读命令或图形化工具,避免破坏文件。
现场抓包检查清单
| 检查项 | 目的 | 常见疏漏 |
|---|---|---|
| 确认网卡名 | 避免抓错接口拿到空文件 | 用了通用网卡却需要链路层信息 |
| 估算磁盘余量 | 保证长时间抓包不断档 | 只估了包数没估文件体积 |
| 设置抓取长度 | 保证报文内容完整 | 默认长度导致内容被截断 |
| 确认过滤条件 | 既不过窄也不过宽 | 条件过窄漏掉关键报文 |
| 留好时间标记 | 把抓包与业务日志对齐 | 文件名没有时间信息难以检索 |
| 抓完立即校验 | 确认文件非空且可回读 | 直接归档,事后才发现是空文件 |
抓包结束后先用回读命令看前几行,确认文件非空、时间范围覆盖故障窗口,再交给他人分析,能省下一轮往返。
抓包文件可能包含账号口令与业务数据,传输与留存都要按敏感数据管理;排障结束应明确归档或及时删除。