首页/网络/抓包与流量分析速查/tcpdump -r 读取 pcap 文件

tcpdump -r 读取 pcap 文件

离线读取已抓取的 pcap 文件,可反复用不同过滤表达式分析同一份数据,是复现问题与自学的常用方式。

-r 在做什么

-r 让 tcpdump 从已有的 pcap 文件读取报文,而不是从网卡实时抓取。它支持与在线抓包一样的过滤表达式与打印选项,因此同一份文件能用十几条不同条件反复分析,一次现场抓包可以支撑整场排障。离线分析还有一个明显好处:时间压力消失,可以先粗筛、再逐层收窄,不必担心错过报文。需要注意的是 pcapng 格式(Wireshark 的默认保存格式)在较旧版本的 tcpdump 上读不了,必要时先用 editcap 转换。

基本信息

语法tcpdump -r <文件> [选项] [过滤表达式]
与 -i 的关系互斥,同一条命令里不能同时指定接口与文件
支持格式经典 pcap 直接可读,pcapng 需要较新版本
常用搭配-nn 稳定输出、-c 限制条数、-ttt 看间隔、-A/-X 看内容、-e 看二层
大文件处理先按条件计数,再用 tshark 或 editcap 做统计与切片

典型使用场景

  • 把现场抓到的文件带回本地,按不同假设反复筛选分析
  • 用同一个文件验证多条思路:先按主机筛,再按端口筛,最后看标志位
  • 统计某类报文的条数,例如纯 SYN、复位或重传的规模
  • 与日志时间对齐:输出带日期的可读时间戳再逐条比对
  • 切片留证:先截取故障时间窗,再分享给其他同事分析

常用示例

常用示例
tcpdump -nn -r /tmp/issue.pcap -c 20                       # 先看前 20 条摘要
tcpdump -nn -r /tmp/issue.pcap 'tcp port 443'              # 只筛 443 端口
tcpdump -nn -r /tmp/issue.pcap -tttt -c 10                 # 带日期的时间戳
tcpdump -nn -r /tmp/issue.pcap -A 'tcp port 80'            # 明文内容直接可读
tcpdump -nn -r /tmp/issue.pcap -e 'arp' -c 10              # 看二层头部
tcpdump -nn -r /tmp/issue.pcap -ttt 'port 3306' -c 30      # 看数据库流量间隔

常用搭配与作用

选项作用使用说明
-nn不做解析离线分析保持输出稳定,便于与他人核对
-c限制输出条数先看几十条摸清结构,避免一次刷屏
-tttt带日期的时间戳与业务日志按时间对齐时用它
-ttt相对上一包的间隔看重传与响应间隔是否接近超时值
-A / -X打印载荷内容文本协议用 -A,二进制协议用 -X 看十六进制
-e打印链路层头部需要核对 MAC 与以太网类型时使用
读取时同样支持完整的过滤表达式,等于给同一份报文换视角。排障常见做法是先把文件按主机收窄,再叠加端口、标志位与异常标注条件,逐步逼近结论。
pcapng 与 pcap 是两种不同格式。用旧版本 tcpdump 直接读 Wireshark 保存的默认格式文件会报错,先用 editcap 转换格式再读。

切片与转换

切片与转换
capinfos a.pcap                        # 先看包数、时长与是否有截断标记
editcap -F pcap a.pcapng a.pcap        # pcapng 转经典 pcap
editcap -A '2026-10-13 10:00:00' -B '2026-10-13 10:10:00' a.pcap win.pcap   # 按时间切片
tshark -r a.pcap -Y 'tcp.analysis.retransmission' | wc -l    # 交给 tshark 做统计

判读要点

  • 离线分析结论要标注抓包点位置,脱离位置的判读容易把方向搞反
  • 先看整体规模再做细筛,直接在大文件上跑复杂条件会拖慢分析节奏
  • 文件是否完整要看抓包起止时间:只覆盖问题时段一半的文件不能用来否定某个假设
  • 同一个文件多次筛选条件时要记录用过哪些,避免重复劳动或得出互相矛盾的结论
  • 先按会话维度统计规模,再对可疑会话逐条深入,比从第一条报文开始读更高效
  • 把结论与所用过滤条件一起记录,别人复核时可以直接复现同一视图
离线分析的另一层价值是可以对同一份数据做定量结论:统计某端口上的建连次数、复位比例或重传条数,这些数字比单看几条报文更有说服力,也更容易放进工单与复盘材料里。

易错点

  • 把 pcapng 文件直接丢给旧版本 tcpdump 会报格式错误,需要先转换为经典 pcap
  • 读取时试图同时使用接口参数会直接报错,两条命令要分开执行
  • 大文件上直接跑复杂过滤器耗时很长,先用条数上限与粗条件摸底
  • 离线分析容易忽略抓包点位置,脱离位置判读方向与责任方会得出错误结论
  • 文件被截断或抓包中途停止时,结论只能覆盖实际抓到的时段,不能代表全过程

数据来源与参考

  • man 8 tcpdump(-r 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌