Wireshark 常用 CLI 命令详解(tshark 工具链)

Wireshark CLI 全家桶实战详解:tshark 抓包/读文件/字段提取/统计、dumpcap 分卷与非 root 直跑、capinfos/editcap/mergecap 文件加工(分片、去重 168→84、时间窗、转格式)、text2pcap 合成抓包,全部命令附 Ubuntu 24.04 真实回显。

WiresharkWireshark网络抓包网络Ubuntu 24.042026/10/27

Wireshark 常用 CLI 命令详解(tshark 工具链)

目标:把 Wireshark 在服务器上的 CLI 全家桶——tshark、dumpcap、capinfos、editcap、mergecap、text2pcap、rawshark——逐个讲清职责、常用参数与真实回显,覆盖「抓包落盘 → 读文件过滤 → 字段提取 → 统计分析 → 文件加工(分片/合并/去重/转格式)→ 合成抓包」的完整工作流。全部命令与回显在本机逐条实测(Ubuntu 24.04,Wireshark 4.2.2,2026-10-27)。

一、环境信息

  • 操作系统:Ubuntu 24.04 LTS(x86_64)
  • Wireshark 版本:4.2.2-1.1build3(Ubuntu 24.04 仓库实装,tshark --version 实测;工具链随 wireshark-common/tshark 包一并安装,安装过程见 《Wireshark 安装与初始化实战》)
  • 官方最新稳定版参考:4.6.9(wireshark.org/download.html,查询日期 2026-10-27)
  • 网卡:eth0(IP 10.89.63.2,网关 10.89.63.1)与 lo 回环
  • 实测工作目录:/root/capdata(本文所有 pcapng 生成于此)
  • 实测流量源:python3 -m http.server 8131 --bind 127.0.0.1 + curl(HTTP)、ping(ICMP)、dig @8.8.8.8(DNS)
  • 过滤器语法体系(-f/-Y 的完整规则)见 《Wireshark 配置与过滤器体系详解》

二、工具概览

全家桶七个工具各司其职(均为 /usr/bin/ 下独立程序,which 逐一验证过):

工具职责本文实测小节
tshark抓包 + 读文件 + 过滤 + 字段提取 + 统计(无界面版 Wireshark,主工具)四
dumpcap专职抓包落盘(tshark 实时捕获的底层执行者),支持分卷/环形缓冲五
capinfos读抓包文件元信息(包数/时长/速率/时间戳精度)六
editcap编辑抓包文件:分片、去重、时间窗筛选、pcap/pcapng 互转七
mergecap合并多个抓包文件八
text2pcap十六进制转储文本 → pcapng 抓包文件九
rawshark解析裸帧字节流(输入只接受 FIFO/接口)十

本文实测使用两个预先抓好的素材文件与一个合成文件,后文所有「读文件」命令都基于它们:

mkdir -p /root/capdata && cd /root/capdata
python3 -m http.server 8131 --bind 127.0.0.1 &        # 本机临时 HTTP 服务
# 另开一个终端持续 curl http://127.0.0.1:8131/ 产生流量
tshark -i lo -a duration:5 -f 'tcp port 8131' -w http.pcapng   # 抓 HTTP 流量
tshark -i eth0 -a duration:4 -f 'port 53' -w dns.pcapng        # 抓 DNS 流量

实测产物(ls -l /root/capdata 节选):

-rw------- 1 root root   652 Oct 27 07:42 dns.pcapng
-rw------- 1 root root 17932 Oct 27 07:42 http.pcapng

三、前置条件

  1. 工具链在位(七个命令 which 可查,安装篇 4.3 已验证);
  2. 执行用户具备抓包权限(root 可用;普通用户走 wireshark 组授权——实测 dumpcap 拿到 cap_net_admin,cap_net_raw=eip 文件能力后,普通用户可直跑 dumpcap,见 5.3);
  3. 一个可产生真实流量的服务与客户端(本文用本机 HTTP 服务 + curl);
  4. 抓包落盘目录有足够磁盘(df -h 自查)。

四、tshark 详解(主工具)

4.1 捕获与写文件(-i / -a / -f / -w)

抓本机 HTTP 流量 5 秒并落盘:

tshark -i lo -a duration:5 -f 'tcp port 8131' -w http.pcapng

实测回显(结束自动退出;-w 落盘时无逐行输出):

(无输出,命令 5 秒后返回)

参数说明:-i <接口> 指定网卡(any 表示全部接口);-a duration:5 是自动停止条件(5 秒后停,不依赖流量计数);-f <BPF> 捕获过滤器;-w <文件> 落盘(默认 pcapng 格式)。常用 -a 条件还有 filesize:<KB>、files:<数量>(与 dumpcap -b 组合做环形缓冲)。

抓 DNS 流量(对 8.8.8.8 发起 dig 期间):

dig +time=3 +tries=1 @8.8.8.8 archive.ubuntu.com > /dev/null &
tshark -i eth0 -a duration:4 -f 'port 53' -w dns.pcapng

4.2 读取与过滤(-r / -Y)

读文件并套显示过滤器(过滤器规则详见过滤器体系篇):

tshark -r http.pcapng -Y 'http.request'

实测回显(节选,84 个原始包中筛出 HTTP 请求):

    4 0.000057664    127.0.0.1 → 127.0.0.1    HTTP 143 GET / HTTP/1.1 
   16 0.508761855    127.0.0.1 → 127.0.0.1    HTTP 143 GET / HTTP/1.1 
   28 1.015522511    127.0.0.1 → 127.0.0.1    HTTP 143 GET / HTTP/1.1 
   40 1.523601271    127.0.0.1 → 127.0.0.1    HTTP 143 GET / HTTP/1.1 

4.3 字段提取(-T fields -e)

把分析结果转成机器可读列(运维脚本最常用形态):

tshark -r http.pcapng -Y 'http.request' -T fields -e frame.number -e http.request.method -e http.host -e http.request.uri

实测回显(制表符分隔):

4	GET	127.0.0.1:8131	/
16	GET	127.0.0.1:8131	/
28	GET	127.0.0.1:8131	/
40	GET	127.0.0.1:8131	/

参数说明:-T fields 输出制表符分隔列(另有 -T json/-T ek/-T tabs 等机器格式);-e <字段> 可重复指定多个,字段名即显示过滤器字段(tshark -G fields 可列全集,或查官方 dfref)。

4.4 统计(-z 系列)

会话统计(谁和谁说了多少话):

tshark -r http.pcapng -z conv,tcp -q

实测回显(节选,每条 TCP 会话一行的双向字节统计):

================================================================================
TCP Conversations
Filter:<No Filter>
                                                           |       <-      | |       ->      | |     Total     |    Relative    |   Duration   |
                                                           | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |      Start     |              |
127.0.0.1:55404            <-> 127.0.0.1:8131                   6 1622 bytes       6 481 bytes      12 2103 bytes     0.000000000         0.0007
127.0.0.1:55410            <-> 127.0.0.1:8131                   6 1622 bytes       6 481 bytes      12 2103 bytes     0.508533970         0.0007
127.0.0.1:55412            <-> 127.0.0.1:8131                   6 1622 bytes       6 481 bytes      12 2103 bytes     1.015445865         0.0009

IO 统计(读文件模式,按 1 秒间隔切片):

tshark -r http.pcapng -z io,stat,1 -q

实测回显(节选):

=============================
| IO Statistics             |
|                           |
| Duration: 3. 47052 secs   |
| Interval: 1 secs          |
|                           |
| Col 1: Frames and bytes   |
|---------------------------|
|          |1               |
| Interval | Frames | Bytes |
|---------------------------|
|  0 <> 1  |     24 |  4206 |
|  1 <> 2  |     24 |  4206 |
|  2 <> 3  |     24 |  4206 |
|  3 <> Dur|     12 |  2103 |
=============================

IO 统计(实时抓包模式,-z 与 -i 同用时边抓边统计):

tshark -i lo -a duration:4 -f 'tcp port 8131' -z io,stat,2 -q

实测回显(节选,2 秒间隔汇总一次):

|          |1               |
| Interval | Frames | Bytes |
|---------------------------|
|  0 <> 2  |     60 | 10515 |
|  2 <> Dur|     60 | 10515 |
=============================

参数说明:-z <统计名> 可叠加多个;io,stat,<间隔秒> 的间隔参数控制切片粒度;-q 表示「只输出统计、不逐行打印报文」——与 -z 搭配的标准写法。常用统计还有 conv,udp、endpoints,ip、http,tree、dns,tree 等(tshark -z help 可列全集)。

4.5 帮助与版本

tshark -h 2>&1 | head -6

实测回显:

TShark (Wireshark) 4.2.2 (Git v4.2.2 packaged as 4.2.2-1.1build3)
Dump and analyze network traffic.
See https://www.wireshark.org for more information.

Usage: tshark [options] ...

五、dumpcap 详解(专职抓包)

5.1 定位:为什么用它

tshark 实时抓包时内部就是调用 dumpcap 子进程(架构说明见 《Wireshark 介绍与选型指南》第三章)。直接使用 dumpcap 的场景:长时间/大流量抓包——它专注落盘不做解析,开销最低,且 -b 分卷参数是全家桶里管理性最好的轮转方案。

5.2 分卷抓包(-b / -a)

dumpcap -i lo -f 'tcp port 8131' -w ring.pcapng -b filesize:4096 -a duration:8

实测回显:

Capturing on 'Loopback: lo'
File: ring_00001_20261027074312.pcapng
ls -l ring*
-rw------- 1 root root 536 Oct 27 07:43 ring_00001_20261027074312.pcapng

参数说明:-b filesize:<KB> 单卷上限(超过即滚动新卷);-b files:<N> 限制卷数构成环形缓冲(生产长时间抓包的标准姿势:-b filesize:102400 -b files:24 ≈ 保留最近 2.4GB);本例流量 536 字节未达 4KB 上限故单卷,多卷时文件名按 _00001_、_00002_ 递增(回显中的命名格式即分卷机制的直接证据)。-a duration:8 到时停止。分卷文件可整体交给 tshark -r 分析,或用 mergecap 按名合并。

5.3 非 root 用户直跑实测

dumpcap 是全家桶里唯一持有抓包文件能力的程序(getcap /usr/bin/dumpcap → cap_net_admin,cap_net_raw=eip,授权过程见安装篇第七章)。wireshark 组用户可直接运行:

python3 -m http.server 8131 --bind 127.0.0.1 &   # 先起本机 HTTP 服务产生流量
su - admin -c 'dumpcap -i lo -f "tcp port 8131" -a duration:5 -w /tmp/admtest.pcapng'

实测回显(admin 用户身份,抓 5 秒;逐包进度 + 结束统计):

File: /tmp/admtest.pcapng
Packets: 1 Packets: 13 Packets: 25 Packets: 37 Packets: 48 Packets: 49 Packets: 61 Packets: 73 Packets: 85 Packets: 96 Packets: 97 Packets: 109 Packets: 121 Packets: 133 Packets: 145 Packets: 156 Packets: 157 Packets: 169 Packets: 181 Packets: 193 Packets captured: 193
Packets received/dropped on interface 'Loopback: lo': 193/0 (pcap:0/dumpcap:0/flushed:0/ps_ifdrop:0) (100.0%)
ls -l /tmp/admtest.pcapng
-rw------- 1 admin admin 40624 Oct 27 07:48 /tmp/admtest.pcapng

关键观察:文件属主是 admin 而非 root——dumpcap 以自身特权抓包,产出文件归发起用户,无需 sudo;结束统计行直接给出捕获/丢弃明细(本例 193/0 无丢包)。

六、capinfos 详解(文件元信息)

拿到一个抓包文件(他人传来/历史留存),先看元信息:

capinfos http.pcapng

实测回显(节选首部,完整输出 30 余行):

File name:           http.pcapng
File type:           Wireshark/... - pcapng
File encapsulation:  Ethernet
File timestamp precision:  nanoseconds (9)
Packet size limit:   file hdr: (not set)
Number of packets:   84
File size:           17 kB
Data size:           14 kB
Capture duration:    3.047051575 seconds
First packet time:   2026-10-27 07:42:08.369756978
Last packet time:    2026-10-27 07:42:11.416808553
Data byte rate:      4831 bytes/s
Data bit rate:       38 kbps
Average packet size: 175.25 bytes

参数说明:常配合 capinfos -c <文件>(只出包数)、capinfos -a -e <文件>(只出首末时间)用于脚本判断;-T 输出制表符分隔便于批量盘点目录下所有抓包文件。多接口合并文件会逐接口列出统计(见 5.1 的 merged.pcapng)。

七、editcap 详解(文件加工)

7.1 分片(-c 按包数)

editcap -c 30 http.pcapng split.pcapng
ls -l split*

实测回显(84 包切成 3 卷,文件名自动带序号与首包时间戳):

-rw-r--r-- 1 root root 6132 Oct 27 07:42 split_00000_20261027074208.pcapng
-rw-r--r-- 1 root root 6944 Oct 27 07:42 split_00001_20261027074209.pcapng
-rw-r--r-- 1 root root 5284 Oct 27 07:42 split_00002_20261027074210.pcapng

参数说明:-c <N> 每 N 包一卷;-i <秒> 可改为按时间分卷;-m 按字节。与 dumpcap 的 -b 分工:dumpcap 在抓包时轮转,editcap 对已有文件事后切分。

7.2 格式转换(-F pcap)

editcap -F pcap http.pcapng http.pcap
capinfos http.pcap | grep -E 'File type|Number of packets'

实测回显:

File type:           Wireshark/tcpdump/... - pcap
Number of packets:   84
                     Number of packets = 84

参数说明:pcapng → pcap 用于喂给只认老格式的老工具;反向转换省略 -F 参数即可(pcapng 是默认输出)。84 包原样保留,只变容器格式。

7.3 时间窗筛选(-A / -B)

editcap -A '2026-10-27 07:42:09' -B '2026-10-27 07:42:10.5' http.pcapng window.pcapng
capinfos window.pcapng | grep -E 'Number of packets|First packet time|Last packet time'

实测回显(84 → 36 包,首末时间被裁进窗口):

Number of packets:   36
First packet time:   2026-10-27 07:42:09.385202843
Last packet time:    2026-10-27 07:42:10.402374689
                     Number of packets = 36

参数说明:-A 起始时刻、-B 结束时刻( ISO8601 局部写法,秒内可带小数)。事后从长抓包里裁出「事故时间段」的标准做法。

7.4 去重(-d)

先把素材文件拼成一份含重复帧的文件(同一文件拼两遍),再去重:

mergecap -w dup.pcapng http.pcapng http.pcapng
capinfos dup.pcapng | grep 'Number of packets' | head -1
editcap -d dup.pcapng dedup.pcapng
capinfos dedup.pcapng | grep 'Number of packets' | head -1

实测回显:

Number of packets:   168
168 packets seen, 84 packets skipped with duplicate window of 5 packets.
Number of packets:   84

参数说明:-d 对比当前报文之前 5 个报文(默认窗口,-w <N> 可调大窗口)的 MD5,命中即丢弃。回显第二行是 editcap 的去重报告(168 见 84 丢)。适用场景:tcpdump 多接口重复抓、探针串联导致的重复帧清洗。

八、mergecap 详解(文件合并)

mergecap -w merged.pcapng http.pcapng dns.pcapng
capinfos merged.pcapng | grep -E 'Number of packets|Interface'

实测回显(节选;84 + 1 = 85 包,两个来源接口各自登记):

Number of packets:   85
Interface #0 info:
                     Number of packets = 84
Interface #1 info:
                     Number of packets = 1

参数说明:默认按时间戳顺序交错合并(还原真实时间线,多机抓包对比时延的关键能力);-a 改为按文件拼接序;-w - 可输出到标准输出配合管道。合并后 Interface #0/#1 的登记信息可用 capinfos -M 查看。

九、text2pcap 详解(合成抓包)

把「日志/文档里的十六进制报文」变成可分析的抓包文件。准备一份 hex 转储文本(格式:偏移 + 十六进制字节,每行任意),内容为一个最小 TCP SYN 报文:

printf '00000000  00 1b 21 6c 72 9c 00 1b  21 6c 72 9c 08 00 45 00\n00000010  00 3c a6 05 00 00 40 06  b8 24 c0 a8 01 02 c0 a8\n00000020  01 01 0c 4b 00 50 00 00  00 01 00 00 00 02 50 02\n00000030  20 00 91 7c 00 00\n' > sample.txt
text2pcap sample.txt sample.pcapng

实测回显:

-------------------------
Read 1 potential packet, wrote 1 packet (368 bytes including overhead).

用 tshark 读入验证(报文被完整解析):

tshark -r sample.pcapng

实测回显:

    1 0.000000000  192.168.1.2 → 192.168.1.1  TCP 54 3147 → 80 [SYN] Seq=0 Win=8192 Len=0

参数说明:文本里的以太网头(前 14 字节 00 1b 21 ... 08 00)+ IPv4 头 + TCP 头被逐字段还原——192.168.1.2:3147 → 192.168.1.1:80 的 SYN 一目了然。常用参数:-e <EtherType>(无链路层头的裸 IP hex 时用 -e 0x0800)、-u <sport>,<dport>(UDP)、-D(GRE 封装)、-t <基准时间>(指定时间戳)。适用场景:从设备日志、抓包工单、协议文档里重建可分析的报文。

十、rawshark 与使用边界

rawshark 的定位是「只解析不抓包」:输入裸帧字节流,输出解析结果,设计给「其他程序管道喂数据」的流式场景。实测确认它不接收普通文件:

rawshark -d encap:EN10MB -r frame.raw

实测回显(报错原文):

rawshark: "frame.raw" is neither an interface nor a pipe

⚠️ 注意:-r 参数只接受命名管道(FIFO)或接口——裸帧需经 FIFO 流式送入(mkfifo 后 cat frame.raw > fifo 与 rawshark -r fifo 配合),-d encap:<封装类型> 声明帧的链路层封装(EN10MB 即标准以太网)。日常排障 99% 用 tshark 即可,rawshark 只在「上游程序持续产出裸帧」的集成场景出场。

十一、注意事项

  1. 权限分层:tshark/dumpcap 实时抓包需 wireshark 组授权(安装篇第七章);读文件、统计、editcap/mergecap/capinfos/text2pcap 纯文件操作,任何用户可跑;
  2. -c 与 -Y 的计数语义:-c 限的是捕获/读取的原始包数,显示过滤发生在其后(过滤器体系篇 5.2 实测),限时采集用 -a duration:<秒> 更符合直觉;
  3. 高流量生产抓包:必带 -f BPF 减量 + dumpcap -b 分卷限盘,避免磁盘写满(抓包进程被 OOM 或盘满中断都会丢现场);
  4. 时间戳精度:pcapng 支持纳秒(6.0 实测 File timestamp precision: nanoseconds (9)),转 -F pcap 后精度降为微秒——对时延敏感的分析避免往返转格式;
  5. root 运行提醒:Running as user "root" ... This could be dangerous. 是固定提示非报错;坚持 root 跑抓包时应确保 dumpcap 授权链未被绕过。

十二、常见问题(FAQ)

Q1:tshark -w 落盘的文件在哪?为什么命令结束时没有输出? -w 静默写盘,结束时无逐行回显,属正常行为。用 capinfos <文件> 或 ls -l 确认产物(四.1 实测)。

Q2:editcap 分卷后文件名里的数字是什么? split_00000_20261027074208.pcapng 中 00000 是卷序号、20261027074208 是该卷首包时间戳(七.1 实测)。分卷文件可独立分析,也可 mergecap -w all.pcapng split_*.pcapng 合回。

Q3:去重报告「84 packets skipped」是怎么算的? editcap -d 默认窗口 5:每个报文与前 5 个报文逐一比对 MD5,重复即丢。七.4 实测:168 帧文件去重后 84 帧,报告原文 168 packets seen, 84 packets skipped with duplicate window of 5 packets.。

Q4:dumpcap 能在 tshark 抓包的同时并行再抓一份吗? 可以,两者是独立进程,但同一接口上多抓手会各占一份内核 ring buffer(-B <MB> 可调),流量大时注意 CPU 与磁盘。生产惯例是「一次抓包、多份分析」:dumpcap 抓一份,tshark/editcap 对文件做各类加工。

Q5:text2pcap 的 hex 文本必须两字节一组对齐吗? 偏移列可省、字节间空格随意,text2pcap 会跳过非 hex 字符;但每行字节数不一致会影响 -o 偏移基准。九章实测样例即标准格式(偏移 + hex)。

Q6:合并多台服务器各自抓的 pcap 后时间对不上? 先确认各机 NTP 对时(capinfos -a -e 看各文件首末时间),mergecap 默认按时间戳交错;若源文件时钟漂移大,用 editcap -t <秒差> 整体平移时间戳后再合并。

十三、参考链接