下面我将从基本语法、常用选项、捕获过滤器、显示过滤器和实用示例几个方面,为你详细讲解 tshark 命令。

基本语法
tshark 命令的基本结构如下:
tshark [选项] [捕获过滤器] [显示过滤器]
- 选项: 控制
tshark的行为,比如输入/输出源、格式等。 - 捕获过滤器: 在数据包被捕获到内存或文件时就进行过滤,效率高,语法与
tcpdump兼容。 - 显示过滤器: 在捕获完成后,对已捕获的数据包进行过滤和显示,语法更强大,是 Wireshark 的核心功能之一。
常用选项
捕获选项
这些选项用于指定从哪里捕获数据包。
| 选项 | 描述 | 示例 |
|---|---|---|
-i <接口> |
指定捕获的网络接口。 | tshark -i eth0 |
| 如果不指定,通常会选择第一个非回环接口。 | tshark -i any (捕获所有接口) |
|
-f <捕获过滤器> |
应用捕获过滤器,只捕获匹配的数据包。 | tshark -i eth0 -f "host 192.168.1.100" |
-w <文件名> |
将捕获的数据包直接写入文件,而不是在终端显示。 | tshark -i eth0 -w capture.pcap |
-a <捕获自动停止选项> |
在满足条件时自动停止捕获。 | tshark -a duration:60 (60秒后停止) |
可选值:duration:秒数, files:数量, filesize:千字节数(K), packets:数量 |
tshark -a filesize:1024 (文件达到1MB时停止) |
|
-s <快照长度> |
设置每个数据包捕获的最大长度(字节),默认为65535。 | tshark -s 128 (只捕获每个数据包的前128字节) |
输出选项
这些选项控制输出格式和内容。
| 选项 | 描述 | 示例 |
|---|---|---|
-T <输出格式> |
指定输出格式。 | tshark -T json (输出JSON格式) |
常用值:text (默认), json, ps, ek (Elasticsearch JSON) |
tshark -T fields (字段输出模式) |
|
-x |
以十六进制和ASCII形式显示数据包的完整内容。 | tshark -x |
-V |
显示协议字段的详细信息,类似于Wireshark的Packet Details面板。 | tshark -V |
-2 |
在不进行捕获的情况下,对已存在的文件应用两次显示过滤器(用于复杂过滤)。 | tshark -2 -R "http" -r capture.pcap |
-r <文件名> |
从一个文件中读取数据包进行分析,而不是进行实时捕获。 | tshark -r capture.pcap |
字段提取选项
这是 tshark 最强大的功能之一。

| 选项 | 描述 | 示例 |
|---|---|---|
-T fields |
进入字段输出模式。 | |
-e <字段名> |
指定要提取的字段,可以多次使用 -e 来提取多个字段。 |
tshark -T fields -e ip.src -e ip.dst -e http.request.uri |
-E <格式选项> |
控制字段的格式化输出。 | tshark -T fields -e ip.src -E separator=, |
常用值:header=y|n (是否打印字段名作为标题), fieldsep=<分隔符>, quote=d|s|n (引号风格) |
tshark -T fields -e frame.number -e ip.src -E header=y |
捕获过滤器 vs. 显示过滤器
理解两者的区别至关重要:
| 特性 | 捕获过滤器 | 显示过滤器 |
|---|---|---|
| 作用时机 | 数据包被捕获时 | 数据包被捕获后,进行分析显示时 |
| 处理范围 | 内核层面过滤,效率极高 | 用户层面过滤,对CPU有要求 |
| 语法 | 基于 libpcap (如 tcpdump),语法相对简单 |
基于 Wireshark Display Filter,语法非常强大和灵活 |
| 资源消耗 | 低,只捕获匹配的数据包,节省磁盘空间和内存。 | 高,需要捕获所有数据包,然后在内存中过滤。 |
| 适用场景 | 长时间、高流量环境下的捕获,避免磁盘写满。 | 分析已捕获的文件,或进行精细化的协议分析。 |
示例对比:
- 捕获过滤器: 只捕获与
168.1.100之间的HTTP流量。tshark -i eth0 -f "host 192.168.1.100 and tcp port 80" -w http_traffic.pcap
- 显示过滤器: 从一个已存在的
capture.pcap文件中,只显示HTTP GET请求。tshark -r capture.pcap -Y "http.request.method == GET"
实用示例
示例1:实时捕获并查看流量
捕获 eth0 接口上的流量,并实时显示,但只显示IP地址和协议。
tshark -i eth0 -Y "ip" -T fields -e ip.src -e ip.dst -e protocol
示例2:捕获并保存到文件
捕获 eth0 接口上的所有流量,保存到 mycapture.pcap 文件,持续60秒。

tshark -i eth0 -a duration:60 -w mycapture.pcap
示例3:分析已保存的文件
查看 mycapture.pcap 文件中所有的 TCP 握手(SYN包)。
tshark -r mycapture.pcap -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
示例4:提取特定字段并导出为CSV
从一个 http.pcap 文件中,提取所有HTTP请求的源IP、目标IP和方法,并输出为CSV格式。
tshark -r http.pcap -Y "http" \
-T fields \
-e ip.src \
-e ip.dst \
-e http.request.method \
-E header=y \
-E fieldsep=, \
> http_requests.csv
这个命令会生成一个类似这样的 http_requests.csv 文件:
ip.src,ip.dst,http.request.method
192.168.1.10,93.184.216.34,GET
192.168.1.10,93.184.216.34,GET
...
示例5:统计Top N的通信对
统计 capture.pcap 文件中,通信次数最多的IP地址对。
# 提取源IP和目标IP,排序,去重,并显示计数 tshark -r capture.pcap -T fields -e ip.src -e ip.dst | sort | uniq -c | sort -nr | head -n 10
命令解释:
tshark ... -e ip.src -e ip.dst: 提取每对通信IP。sort: 对结果进行排序,为uniq做准备。uniq -c: 合并连续的相同行,并统计出现次数。sort -nr: 按照数字逆序排列(-n数字, -r逆序)。head -n 10: 只显示前10行。
示例6:监控特定端口的错误
实时监控 8080 端口上的 RST 或 FIN 包,这可能表示连接异常终止。
tshark -i any -f "tcp port 8080" -Y "tcp.flags.rst == 1 or tcp.flags.fin == 1"
获取帮助
-
查看所有选项:
tshark -h
-
查看支持的显示过滤器字段:
tshark -G fields
-
查看捕获过滤器表达式:
man pcap-filter
tshark 是网络工程师和系统管理员的瑞士军刀,掌握它,你将能够:
- 自动化网络任务,如日志记录、安全监控。
- 远程分析服务器网络问题,无需图形界面。
- 高效提取所需数据,进行后续处理(如用
awk,python脚本分析)。
从 -i, -r, -w 等基本选项开始,逐步学习 -Y 显示过滤器和 -T fields 字段提取,你就能解决绝大多数网络分析问题。
