3

tshark是网络分析工具wireshark下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump难以胜任的场景中。本系列文章将整理介绍tshark相关内容。

简介

安装

在linux下安装(debian或ubuntu)

sudo apt-get install tshark
安装完成后在抓包之前,可以先检查版本、查看帮助等了解tshark初步了解

安装后检查

按照安装wireshark的方式,安装完成后,启动“终端”(命令提示符):

tshark -v

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层,可以通过简单字符进行。不建议作过多过滤(规则复杂可能影响抓包性能)

wireshark内置捕获过滤

读取(显示)过滤(Display Filter)

用于抓包之后,能够对报文可识别的协议字段进行过滤,可对2~7层过滤,可使用逻辑表达式,多个条件结合使用。

wireshark内置显示过滤

注意:
建议在使用时,先在wireshare过滤栏调试,具有字段提示,表达式合规会显示绿色

参考:

系列文章:


puyu
184 声望17 粉丝