tshark 的角色
tshark 是 Wireshark 的命令行版本,把抓包、解析与统计能力搬到无图形界面的服务器上。它同时支持两套过滤语法:捕获过滤器用 BPF,与 tcpdump 完全一致,决定抓什么;显示过滤器用 Wireshark 字段语法,作用在已抓到的报文上,决定看什么。配合字段提取与内置统计,可以把报文直接转成便于排序和计数的文本,是自动化排障与事后分析的常用入口。
基本信息
| 适用平台 | Linux、macOS、Windows,包名通常为 wireshark-cli 或 tshark |
|---|---|
| 两套过滤 | -f 捕获过滤(BPF),-Y 显示过滤(Wireshark 语法) |
| 字段提取 | -T fields -e 字段名,可多个字段并用 -E 指定分隔符 |
| 统计能力 | -z 系列:会话统计、时间序列、专家信息 |
| 文件接口 | -w 写 pcap,-r 读 pcap |
典型使用场景
- 生产机上现场抓包后落盘,带回本地用图形界面细看
- 把重传、复位等异常事件抽成文本清单,便于统计与排序
- 大批量 pcap 巡检:用统计功能快速找出问题会话
- 自动化排障脚本:抓取指定字段后交给 awk 或表格工具处理
- 结合时间序列统计观察流量与错误随时间的变化
常用命令
常用命令
tshark -i eth0 -f 'tcp port 443' -c 20
tshark -i eth0 -Y 'tcp.analysis.retransmission' -T fields -e frame.number -e ip.src -e tcp.seq
tshark -r cap.pcap -Y 'http.response.code >= 500' -T fields -e frame.number -e ip.src -e http.response.code
tshark -r cap.pcap -q -z conv,tcp | head -20
tshark -r cap.pcap -q -z io,stat,1,'COUNT(frame)frame'
tshark -r cap.pcap -Y 'tcp.flags.reset == 1' -T fields -E separator=, -e ip.src -e tcp.dstport常用参数
| 参数 | 用途 | 注意点 |
|---|---|---|
| -f | 捕获过滤器(BPF,同 tcpdump) | 与 -Y 语法不通用 |
| -Y | 显示过滤器(Wireshark 语法) | 先抓后筛,不影响抓取量 |
| -T fields -e F | 输出指定字段的文本 | 字段名要写全,如 tcp.len |
| -E separator=, | 指定字段分隔符 | 便于导入表格工具 |
| -z | 统计,如 conv、io,stat、expert | 配合 -q 只输出统计结果 |
| -w / -r | 写 pcap / 读 pcap | 现场只抓一次,事后反复解析 |
tcpdump 抓包加 tshark 解析是生产排障的黄金组合:前者稳定轻量、对系统负担小,后者解析与统计能力完整。
输出字段默认用制表符分隔,写脚本时显式指定 -E separator 并配合 -E header=n 控制是否打印表头,能减少后续处理的意外。
字段名可以先用 -T fields -e 加猜测再修正,遇到字段不存在时 tshark 会直接提示名称未找到,比反复查文档更快;正式脚本里要固定字段名,跨版本升级后重新验证一次。