tshark是网络分析工具wireshark
下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump
难以胜任的场景中。本系列文章将整理介绍tshark相关内容。
简介
安装
在linux下安装(debian或ubuntu)
安装后检查
按照安装wireshark的方式,安装完成后,启动“终端”(命令提示符):
tshark参数命令解析
查看帮助如下:
➜ ~ tshark -h
TShark (Wireshark) 3.0.1 (v3.0.1-0-gea351cd8)
Dump and analyze network traffic.
See https://www.wireshark.org for more information.
Usage: tshark [options] ...
主要参数说明
接口报文捕捉
-i <interface> 接口名或网卡编号 (默认: 第一个非环回接口)
-f <capture filter> 使用libpcap过滤表达式进行包过滤
-s <snaplen> 设置每个抓包的大小,默认为65535。
(相当于tcpdump的-s,tcpdump默认抓包的大小仅为68)
-p 不使用混杂模式抓捕报文(即只抓取与本机有关的流量)
-I 如果支持则启用镜像模式
-B <buffer size> 内核缓存大小 (默认2MB)
-y <link type> 链路层类型 (默认为找到的第一个协议)
--time-stamp-type <type> 接口时间戳类型
-D 列出所有接口并退出
-L 列出所有接口链路层类型并退出(供-y参数使用)
--list-time-stamp-types 列出所有接口时间戳类型并退出(供--time-stamp参数使用)
捕获终止条件
-c <packet count> 捕获到n个包时停止 (默认不限,持续捕获)
-a <autostop cond.> ... duration:NUM - 捕获进行NUM后停止
filesize:NUM - 输出文件大于NUM KB后停止
files:NUM - 输出超过NUM个文件后停止
捕获输出
-b <ringbuffer opt.> ... duration:NUM - 在NUM秒后写入下一个文件(文件名由-w参数决定)
interval:NUM - create time intervals of NUM secs
filesize:NUM - 在文件大于NUM KB后写入下一个文件
files:NUM - 循环缓存: 在NUM个文件后替换早前的
读取文件
-r <infile|-> 设置需要读取的文件名及路径(或'-'表示标准输入,从终端输入)
分析处理
-2 执行two-pass分析
-M <packet count> 执行会话自动重置
-R <read filter> 包读取过滤使用wireshark显示过滤表达式(配合-2参数)
-Y <display filter> 包显示过滤使用wireshark显示过滤表达式
-n 不进行名称解析 (def: all enabled)
-N <name resolve flags> 启用指定的地址名字解析: "mnNtdv"
(“m”代表MAC层,“n”代表网络层,“t”代表传输层,“N”代表当前异步DNS查找。)
-d <layer_type>==<selector>,<decode_as_protocol> ...
"解析为",详见man帮助页面。例: tcp.port==8888,http
(注意选择子和解包协议之间不能留空格)
-H <hosts file> 读取主机列表文件,将被写入捕获的文件(Implies -W n)
--enable-protocol <proto_name>
启用协议报文解析
--disable-protocol <proto_name>
不对指定协议报文解析
--enable-heuristic <short_name>
启用协议报文启发式解析
--disable-heuristic <short_name>
不对指定协议报文启发式解析
输出
-w <outfile|-> 使用pcapng格式将报文写入"outfile"文件
(或'-'表示标准输出,直接显示在终端)
-C <config profile> 启动时使用指定的配置文件
-F <output file type> 设置输出文件格式类型, 默认为pcapng格式
"-F"留空则列出所有的文件类型
-V 输出中增加报文层次树(包详细信息)
-O <protocols> 仅显示以下协议的详细信息,逗号分割
-P 每写入一个文件后进行包情况汇总
-S <separator> 数据包之间的行分割符
-x 输出中增加16进制和ascii字符信息(报文按字节显示)
-T pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|?
文本输出格式 (默认文本:text)
-j <protocolfilter> 当-T ek|pdml|json 设置时协议层过滤
(例:"ip ip.flags text", 过滤不展开的所有字节点,除非过滤中有指定的子节点)
-J <protocolfilter> 当 -T ek|pdml|json 选项设置时进行顶层协议过滤,
(例: "http tcp", 过滤展开的所有字节点)
-e <field> 当 -T fields 设置时打印字段 (如tcp.port,_ws.col.Info)
此选项可以多个用于打印多个字段
-E<fieldsoption>=<value> 当-Tfields选项启用时用于输出配置:
bom=y|n 打印UTF-8 BOM
header=y|n 选择首行是否输出字段名(类似表头)
separator=/t|/s|<char> 选择字段采用tab、空格、指定可打印字符为分割符
occurrence=f|l|a 打印第一个、最后一个或全部出现的数值(默认全部)
aggregator=,|/s|<char> 选择字段采用逗号、空格、指定可打印字符聚合字段
quote=d|s|n 选择对数值采用双引号、单引号、不用引号
-t a|ad|d|dd|e|r|u|ud|? 输出格式化的时间戳(默认r: rel. 优先)
-u s|hms 输出格式化秒(默认s:秒)
-l 每个包之后就刷新标准输出
-q 向终端输出少量信息 (e.g. 当使用统计)
-Q 仅向stderr输出确切错误信息(比-q信息更少)
-g 启用组用户读取输出文件
-W n 如果支持,保存额外信息到文件中
n = 写入网络地址解析信息
-X <key>:<value> 扩展选项,详见man页面
-U tap_name PDUs专家模式, 详见man帮助页面
-z <statistics> 大量统计,详见man帮助页面
--capture-comment <comment>
在最新创建的输出文件中增加捕获注释(仅支持pcapng格式)
--export-objects <protocol>,<destdir> 保存指定导出协议对象到指定目录
--color 在输出的文本格式中支持类似Wireshark图形界面的色彩,终端需要支持24位彩色
同时支持pdml、psml的色彩属性(注:这两张属性非标准)
--no-duplicate-keys 如果-T json设置, 合并重复键,将多个值归并在一个键下的数组中
--elastic-mapping-filter <protocols> 如果指定-G elastic-mapping,设置仅mapping文件中指定的协议
杂项
-h 显示帮助
-v 显示版本
-o <name>:<value> ... 覆盖配置项
-K <keytab> 使用keytab文件用于解密kerberos
-G [report] 生成一份或多份报告,默认report="fields"
使用"-G help"获取更多信息
补充说明
支持包输出格式
可用作不同格式转化工具,推荐使用默认的pcapng
tshark -F
tshark: option requires an argument -- F
tshark: The available capture file types for the "-F" flag are:
...
pcap - Wireshark/tcpdump/... - pcap
pcapng - Wireshark/... - pcapng
...
捕获过滤(Capture Filter)
抓包前在网络接口上设置过滤的,使用BPF表达式(tcpdump、libpcap通用)。
通常用于抓取指定的ip、协议,可定位到3层,可以通过简单字符进行。不建议作过多过滤(规则复杂可能影响抓包性能)
读取(显示)过滤(Display Filter)
用于抓包之后,能够对报文可识别的协议字段进行过滤,可对2~7层过滤,可使用逻辑表达式,多个条件结合使用。
注意:
建议在使用时,先在wireshare过滤栏调试,具有字段提示,表达式合规会显示绿色
参考:
系列文章: