菜鸟科技网

tshark命令怎么用?参数有哪些?

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

tshark命令怎么用?参数有哪些?-图1
(图片来源网络,侵删)

基本语法

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 最强大的功能之一。

tshark命令怎么用?参数有哪些?-图2
(图片来源网络,侵删)
选项 描述 示例
-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命令怎么用?参数有哪些?-图3
(图片来源网络,侵删)
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

命令解释:

  1. tshark ... -e ip.src -e ip.dst: 提取每对通信IP。
  2. sort: 对结果进行排序,为 uniq做准备。
  3. uniq -c: 合并连续的相同行,并统计出现次数。
  4. sort -nr: 按照数字逆序排列(-n数字, -r逆序)。
  5. head -n 10: 只显示前10行。

示例6:监控特定端口的错误

实时监控 8080 端口上的 RSTFIN 包,这可能表示连接异常终止。

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 字段提取,你就能解决绝大多数网络分析问题。

分享:
扫描分享到社交APP
上一篇
下一篇