苏卡达 2019-07-01
tshark是网络分析工具wireshark
下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump
难以胜任的场景中。本系列文章将整理介绍tshark相关内容。
sudo apt-get install tshark
安装完成后在抓包之前,可以先检查版本、查看帮助等了解tshark初步了解
按照安装wireshark的方式,安装完成后,启动“终端”(命令提示符):
tshark -v
查看帮助如下:
➜ ~ 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 ...
抓包前在网络接口上设置过滤的,使用BPF表达式(tcpdump、libpcap通用)。
通常用于抓取指定的ip、协议,可定位到3层,可以通过简单字符进行。不建议作过多过滤(规则复杂可能影响抓包性能)
用于抓包之后,能够对报文可识别的协议字段进行过滤,可对2~7层过滤,可使用逻辑表达式,多个条件结合使用。
注意:
建议在使用时,先在wireshare过滤栏调试,具有字段提示,表达式合规会显示绿色
参考:
系列文章: