tshark

tshark

基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
抓拍界面:
-i <接口>, --interface <接口>
接口的名称或 idx(默认:第一个非环回)
-f <capture filter> libpcap 过滤器语法中的数据包过滤器
-s <snaplen>, --snapshot-length <snaplen>
数据包快照长度(默认值:适当的最大值)
-p, --no-promiscuous-mode
不要在混杂模式下捕获
-I, --monitor-mode 在监控模式下捕获,如果可用
-B <缓冲区大小>, --buffer-size <缓冲区大小>
内核缓冲区的大小(默认:2MB)
-y <链接类型>, --linktype <链接类型>
链路层类型(默认:第一个合适的)
--time-stamp-type <type> 接口的时间戳方法
-D, --list-interfaces 打印接口列表并退出
-L, --list-data-link-types
打印 iface 的链路层类型列表并退出
--list-time-stamp-types 打印 iface 的时间戳类型列表并退出

捕获停止条件:
-c <packet count> 在 n 个数据包后停止(默认:无限)
-a <自动停止条件> ..., --autostop <自动停止条件> ...
持续时间:NUM - NUM 秒后停止
文件大小:NUM - 在 NUM KB 后停止此文件
files:NUM - 在 NUM 个文件后停止
packets:NUM - 在 NUM 个数据包后停止
捕获输出:
-b <ringbuffer opt.> ..., --ring-buffer <ringbuffer opt.>
duration:NUM - NUM 秒后切换到下一个文件
filesize:NUM - 在 NUM KB 之后切换到下一个文件
files:NUM - ringbuffer: 在 NUM 个文件之后替换
packets:NUM - 在 NUM 个数据包之后切换到下一个文件
interval:NUM - 到时切换到下一个文件
NUM 秒的精确倍数
输入文件:
-r <infile>, --read-file <infile>
设置要读取的文件名(或标准输入为“-”)

处理:
-2 执行两遍分析
-M <packet count> 执行会话自动重置
-R <读取过滤器>, --read-filter <读取过滤器>
Wireshark 显示过滤器语法中的数据包读取过滤器
(需要-2)
-Y <显示过滤器>, --display-filter <显示过滤器>
Wireshark 显示过滤器中的数据包显示过滤器
句法
-n 禁用所有名称解析(def: "mNd" 启用,或
在首选项中设置)
-N <名称解析标志> 启用特定名称解析:“mnNtdv”
-d <layer_type>==<selector>,<decode_as_protocol> ...
“解码为”,详细信息请参见手册页
示例:tcp.port==8888,http
-H <hosts file> 从主机文件中读取条目列表,这将
然后写入捕获文件。 (暗示-W n)
--enable-protocol <proto_name>
启用 proto_name 的剖析
--disable-protocol <proto_name>
禁用 proto_name 的剖析
--enable-heuristic <short_name>
启用启发式协议的剖析
--disable-heuristic <short_name>
禁用启发式协议的剖析
输出:
-w <outfile|-> 将数据包写入名为“outfile”的 pcapng 格式文件
(或“-”用于标准输出)
--capture-comment <评论>
如果支持,添加捕获文件注释
-C <config profile> 从指定的配置文件开始
-F <output file type> 设置输出文件类型,默认为pcapng
空的“-F”选项将列出文件类型
-V 添加数据包树的输出(数据包详细信息)
-O <protocols> 只显示这些协议的数据包详细信息,逗号
分离
-P, --print 打印数据包摘要,即使在写入文件时也是如此
-S <separator> 在数据包之间打印的行分隔符
-x 添加十六进制和 ASCII 转储的输出(数据包字节)
--hexdump <hexoption> 添加 hexdump,设置数据源和 ASCII 转储的选项
all 转储所有数据源(-x 默认)
帧仅转储帧数据源
ascii 包括 ASCII 转储文本(-x 默认值)
delimit 用 '|' 分隔 ASCII 转储文本人物
noascii 排除 ASCII 转储文本
help 显示 --hexdump 的帮助并退出
-T pdml|ps|psml|json|jsonraw|ek|tabs|文本|字段|?
文本输出格式(默认:文本)
-j <protocolfilter> 如果选择了 -T ek|pdml|json,则协议层过滤
(例如“ip ip.flags text”,过滤器不展开子
节点,除非在过滤器中也指定了子节点)
-J <protocolfilter> 顶级协议过滤器,如果选择 -T ek|pdml|json
(例如“http tcp”,展开所有子节点的过滤器)
-e <field> 如果选择了 -Tfields 则要打印的字段(例如 tcp.port,
_ws.col.Info)
可以重复此选项以打印多个字段
-E<fieldsoption>=<value> 选择 -Tfields 时设置输出选项:
bom=y|n 打印 UTF-8 BOM
header=y|n 打开和关闭标题
separator=/t|/s|<char> 选择制表符、空格、可打印字符作为分隔符
occurrence=f|l|a 打印每个字段的第一次、最后一次或所有出现
aggregator=,|/s|<char> 选择逗号、空格、可打印字符作为
聚合器
quote=d|s|n select double, single, no quotes for values
-t a|ad|adoy|d|dd|e|r|u|ud|udoy
时间戳的输出格式(def: r: rel. to first)
-u s|hms 秒的输出格式(def: s: seconds)
-l 在每个数据包之后刷新标准输出
-q 在 stdout 上更安静(例如,在使用统计信息时)
-Q 仅将真实错误记录到 stderr(比 -q 更安静)
-g 启用对输出文件的组读访问
-W n 如果支持,在文件中保存额外信息。
n = 写入网络地址解析信息
-X <key>:<value> 扩展选项,详见手册页
-U tap_name PDUs 导出模式,详见手册页
-z <statistics> 各种统计,详见手册页
--export-objects <协议>,<目标目录>
将协议的导出对象保存到目录
名为“destdir”
--export-tls-session-keys <密钥文件>
将 TLS 会话密钥导出到名为“keyfile”的文件
--color 颜色输出文本类似于 Wireshark GUI,
需要支持 24 位颜色的终端
还为 pdml 和 psml 格式提供颜色属性
(注意属性是非标准的)
--no-duplicate-keys 如果指定-T json,合并对象中的重复键
进入一个单一的键,作为价值一个包含所有的json数组
价值观
--elastic-mapping-filter <protocols> 如果指定了-G elastic-mapping,则只放
映射文件中指定的协议
--temp-dir <directory> 将临时文件写入此目录
(默认值:/tmp)

诊断输出:
--log-level <level> 设置活动日志级别(“严重”、“警告”等)
--log-fatal <level> 设置中止程序的级别(“严重”或“警告”)
--log-domains <[!]list> 活动日志域的逗号分隔列表
--log-debug <[!]list> 以逗号分隔的具有“调试”级别的域列表
--log-noisy <[!]list> 以逗号分隔的具有“嘈杂”级别的域列表
--log-file <path> 将消息输出到的文件(除了 stderr)

各种各样的:
-h, --help 显示帮助并退出
-v, --version 显示版本信息并退出
-o <名称>:<值> ... 覆盖首选项设置
-K <keytab> 用于 kerberos 解密的密钥表文件
-G [report] 转储几个可用报告之一并退出
默认报告=“字段”
使用“-G help”获取更多帮助

Dumpcap 可以受益于启用的 BPF JIT 编译器(如果可用)。
您可能希望通过执行以下命令来启用它:
“echo 1 > /proc/sys/net/core/bpf_jit_enable”
请注意,这可能会降低您的系统的安全性!

抓取功能解释以及使用

  • -i <interface>, --interface <interface>:指定要抓取数据包的网络接口的名称或者索引号,例如eth01
  • -f <capture filter>:使用libpcap过滤器语法来选择要捕获的数据包,例如tcp port 80仅抓取目标端口为80的TCP数据包。
  • -s <snaplen>, --snapshot-length <snaplen>:设置抓包的数据快照长度,即抓包的数据包中只会抓取前snaplen个字节,默认值为适当的最大值。
  • -p, --no-promiscuous-mode:关闭混杂模式,即只捕获目标接口上的流量,而非所有流量。
  • -I, --monitor-mode:在监控模式下捕获数据包,如果可用。监控模式可以通过禁止网卡的MAC地址过滤,并提供接受非管理数据包的能力。
  • -B <buffer size>, --buffer-size <buffer size>:设置内核缓冲区的大小,可以用于控制捕获的数据包数量和占用内存的量,默认为2MB。
  • -y <linktype>, --linktype <linktype>:指定要抓取的数据包的链路层类型。如果没有指定,则tshark会尝试找到合适的类型。
  • --time-stamp-type <type>:设置接口的时间戳方法,例如adapter_unsyncedadapter_fine_tstamp
  • -D, --list-interfaces:列出可用的网络接口列表并退出。
  • -L, --list-data-link-types:列出可用的链路层类型列表并退出。
  • --list-time-stamp-types:列出可用的时间戳类型列表并退出。

捕获停止条件

-c <packet count>: 用于在捕获指定数量的数据包后停止抓包。例如,使用-c 100表示在捕获100个数据包后停止。

-a <auto stop condition>: 自动停止抓包的条件。可以使用多个选项组合,例如-a duration:60 -a filesize:1000。一些选项包括: duration:NUM - 在 NUM 秒后停止

filesize:NUM - 在 NUM KB 后停止此文件

files:NUM - 在 NUM 个文件后停止

packets:NUM - 在 NUM 个数据包后停止

-b <ringbuffer opt.>: 用于将抓包的输出写入环形缓冲区。一些选项包括:

duration:NUM - NUM 秒后切换到下一个文件

filesize:NUM - 在 NUM KB 之后切换到下一个文件

files:NUM - 在 NUM 个文件之后替换

packets:NUM - 在 NUM 个数据包之后切换到下一个文件

interval:NUM - 到时切换到下一个文件,其中 NUM 是秒的精确倍数。

读取

-r <infile>: 用于指定要读取的pcap文件的名称,或使用“-”表示从标准输入读取。

处理

-2: 执行两遍分析。第一遍分析确定所有数据包并计算它们的长度和时间戳。第二遍执行进一步的分析,例如读取和应用读取过滤器。

-M <packet count>: 执行会话自动重置。当指定的数据包数量被捕获时,将自动重置捕获的会话。

-R <读取过滤器>, --read-filter <读取过滤器>: Wireshark 显示过滤器语法中的数据包读取过滤器。这个过滤器可以用来限制哪些数据包将被处理和显示。

-Y <显示过滤器>, --display-filter <显示过滤器>: Wireshark 显示过滤器中的数据包显示过滤器语法。这个过滤器可以用来限制哪些数据包将在输出中显示。

-n: 禁用所有名称解析。默认情况下,tshark 将尝试对 IP 地址、端口号和 MAC 地址进行名称解析。使用此选项可以禁用名称解析。

-N <名称解析标志>: 启用特定名称解析。名称解析标志是一个包含以下字符的字符串,其中每个字符代表一个名称解析标志: “m” 表示 MAC 地址解析;“n” 表示网络地址解析;“N” 表示网络和主机名解析;“t” 表示主机名解析;“d” 表示 DNS 解析;“v” 表示 DNS 反向解析。例如,使用选项 “-N nd” 将启用网络地址解析和 DNS 解析。

-d <layer_type>==<selector>,<decode_as_protocol> ...: “解码为”选项允许将一个协议解析为另一个协议。此选项的语法为“<layer_type>=, <decode_as_protocol>”。例如,使用选项“tcp.port=8888,http”将解析 TCP 端口 8888 的流量为 HTTP 协议。

-H <hosts file>: 从主机文件中读取条目列表,这将然后写入捕获文件。这个选项只在使用 -W n 时才有效。

--enable-protocol <proto_name>: 启用指定协议的剖析。可以使用该选项启用单个协议剖析。

--disable-protocol <proto_name>: 禁用指定协议的剖析。可以使用该选项禁用单个协议剖析。

--enable-heuristic <short_name>: 启用启发式协议的剖析。启发式协议是指在协议头缺失或损坏时,使用其他信息来推断协议类型的技术。

--disable-heuristic <short_name>: 禁用启发式协议的剖析。

输出

  • -w <outfile|-> : 将数据包写入名为“outfile”的pcapng格式文件(或“-”用于标准输出)。

  • –capture-comment : 如果支持,添加捕获文件注释。

  • -C : 从指定的配置文件开始。

  • -F : 设置输出文件类型,默认为pcapng。空的“-F”选项将列出文件类型。

  • -V : 添加数据包树的输出(数据包详细信息)。

  • -O : 只显示这些协议的数据包详细信息,逗号分离。

  • -P, --print : 打印数据包摘要,即使在写入文件时也是如此。

  • -S : 在数据包之间打印的行分隔符。

  • -x : 添加十六进制和ASCII转储的输出(数据包字节)。

  • –hexdump : 添加hexdump,设置数据源和ASCII转储的选项。可选的值包括:

    • all : 转储所有数据源(-x 默认)。
    • frame : 仅转储帧数据源。
    • ascii : 包括ASCII转储文本(-x 默认值)。
    • delimit : 用 ‘|’ 分隔 ASCII 转储文本人物。
    • noascii : 排除ASCII转储文本。
    • help : 显示–hexdump的帮助并退出。
  • -T pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|? : 文本输出格式(默认:text)。可选的值包括:

    • pdml : Packet Details Markup Language (PDML) 格式。
    • ps : PostScript格式。
    • psml : Packet Summary Markup Language (PSML) 格式。
    • json : JSON格式。
    • jsonraw : 未格式化的JSON格式。
    • ek : ElasticSearch格式。
    • tabs : Tab分隔符格式。
    • text : 文本格式。
    • fields : 指定的字段格式。
    • ? : 列出所有可用的输出格式。
  • -j : 如果选择了-T ek|pdml|json,则协议层过滤(例如“ip ip.flags text”,过滤器不展开子节点,除非在过滤器中也指定了子节点)。

  • -J : 顶级协议过滤器,如果选择了-T ek|pdml|json(例如“http tcp”,展开所有子节点的过滤器)。

  • -e : 如果选择了-T fields,则要打印的字段(例如tcp.port,_ws.col.Info)。可以重复此选项以打印多个字段。

  • -E=是一个用于awk命令的选项,用于在执行文本处理时设置输出选项。其中,可以是以下值之一:

    • FS:设置输入字段分隔符,类似于awk命令中的-F选项。
    • OFS:设置输出字段分隔符,类似于awk命令中的-F选项。
    • RS:设置输入记录分隔符,类似于awk命令中的-R选项。
    • ORS:设置输出记录分隔符,类似于awk命令中的-R选项。
    • NF:设置每个记录的字段数,类似于awk命令中的-F选项。
    • FILENAME:设置当前输入文件的文件名,类似于awk命令中的FILENAME变量。
    • FNR:设置当前记录号(在当前文件中的记录数),类似于awk命令中的FNR变量。

    则是选项的具体值,可以是任何有效的文本字符串。

    举个例子,使用-EFS=','选项可以将输入字段分隔符设置为逗号,而使用-ENF=4选项则可以强制要求每个记录都必须有4个字段。

  • -z <statistics> 是用于捕获统计信息的选项。使用此选项可以捕获各种有关流量的信息,例如每个协议的数量、每个 IP 地址的数量等等。以下是一些可用的统计信息选项:

    • icmp:捕获 ICMP 包的统计信息

    • tcp:捕获 TCP 包的统计信息

    • udp:捕获 UDP 包的统计信息

    • http:捕获 HTTP 流量的统计信息

    • dns:捕获 DNS 流量的统计信息

    • smb:捕获 SMB 流量的统计信息

    • radius:捕获 RADIUS 流量的统计信息

    • radius_acct:捕获 RADIUS 计费流量的统计信息

    • radius_auth:捕获 RADIUS 认证流量的统计信息

    • radius_coa:捕获 RADIUS COA 流量的统计信息