wireShark能够说是迄今为止最为强大的抓包工具。
掌握好它对学习网络协议有巨大的帮助。git
下面是本人学习整理有关wireShare的基本用法:github
首先打开wireShark,点击菜单栏上的捕获(catpure)->选项(options),打开捕获接口窗口 express
捕获接口窗口以下图所示:
须要关注4个部分:
一、接口:展现本机上的网络接口。好比Wi-Fi接口、Loopback接口就是本机的环回地址:若是是访问127.0.0.1或者localhost,应该选择该接口进行抓包。
二、输入与选项:下文有详细介绍
三、流量:展现当前的网卡接口中所通过的流量。
四、捕获过滤器:输入只想抓取的报文的格式浏览器
输入(Output)
一、在抓包的时候,要么把报文存储到临时文件,要么存储到永久文件中。若是是永久文件,那么能够在文件(File)打开一个永久文件,输入格式(Output format)也是能够选择的。
二、若是是临时文件,能够点击自动建立文件(Create a new file automatically)。好比说,通过多少字节、通过多少秒就换一个新的文件等。
三、临时文件也能够用一个环形缓冲器(Use a ring buffer with)。好比说选择2个文件,就会循环使用这两个文件。当这两个文件都写好后,就从新使用第一个文件开始记录。bash
选项(Options):
主要关注两部分:
一、一些显示的选项。好比是否实时的更新分组列表等。
二、自动中止捕获。好比说通过多少字节、多少秒就中止捕获。网络
点击开始(start)就能够抓取报文了。less
抓取到报文后,来看一下wireShark面板功能:
一、工具栏:经过4条竖线分为5类。
二、显示过滤器:展现只想展现的报文。
三、数据包列表:这其中有不少信息,好比有多少条报文,报文的获取时间,ip地址等。当点击其中一个数据包时就能在细节框中展现的细节。
其中报文的时间默认是相对时间:从开始捕获为0s计算。
能够在视图(view)->时间显示格式(Time Display Format)中转换。
若是想对某一个报文为时间零点来设置相对时间,能够对着基准报文点击右键选择设置时间参考(Set/Unset Time Reference)
数据包列表中的标记符号
四、数据包细节:有一个分层的概念。tcp
点击对应的层会有对应的细节。
五、数据包字节流:能够看到左边的字节流对应着右边解析过的信息。工具
wireShark提供了一个便捷方式使得能够从如此庞大的数据报文中找到本身感兴趣的报文会话:追踪流
好比选择感兴趣的报文,点击右键选择追踪流(Follow)->TCP流
就能筛选出感兴趣的会话, 实际上这个操做与在显示过滤器中输入tcp.stream eq 12是同样的。
oop
捕获过滤器又称BPF过滤器。
因此只需搞清楚原语就能知道过滤器的用法。
原语(primitives):由名称或数字,以及描述它的多个限定词组成。
* 限定词(qualifiers)
* Types:设置数字或者名称所指示类型,例如host www.baidu.com
* host、post
* net,设定子网, net 192.168.0.0 mask 255.255.255.0等价于net 192.168.0.0/24
* portrange,设置端口范围,例如portrange 6000-8000
* Dir:设置网络出入方向,例如dst port 80
* src、dst、src or dst、src and dst(src:源端口,dst:目标端口)
* Proto:指定协议类型,例如upd
* ether、fddi、tr、wlan、ip、ip六、arp、rarp、decnet、tcp、udp、icmp、igmp、icmp、igrp、pim、ah、esp、vrrp
* 其余
* gateway:指明网关IP地址,等价于ether host 'ehost' and not host 'host'
* broadcast:广播报文,例如ether broadcast或者ip broadcast
* multicast:多播报文,例如ip multicast或者ip6 multicast
* less、greater:小于或者大于
* 原语运算符
* 与:&&或者and
* 或:||或者or
* 非:!或者not
举例:src or dst portrange 6000-8000 && tcp or ip6
表示的意思就是源端口或者目的端口范围6000到8000,而且是一个tcp协议或者ipv6
复制代码
捕获过滤器格式能够应用到不少软件,而显示过滤器只能应用于wireShark。
显示过滤器的功能一样也是很是强大的,这就意味着学习成本不低啊。
首先得找到显示过滤器支持哪些属性?
通常来讲任何报文细节面板中解析出的字段名,均可以做为过滤属性。
好比说这个Source Post
可是做为过滤属性的名称可不是这样。这个Source Post对应的是tcp.srcpost。
打开视图(view)->内部(internals)->支持的协议(Supported Protocols)
找到名称所对应的过滤器属性
英文 | 符号 | 描述及示例 |
---|---|---|
eq | == | 等于.ip.src == 10.0.0.5 |
ne | != | 不等于.ip.src!=10.0.0.5 |
gt | > | 大于.frame.len > 10 |
lt | < | 小于.frame.len < 128 |
ge | >= | 大于等于.frame.len ge 0x100 |
le | <= | 小于等于.frame.len le 0x20 |
contains | 包含.sip.To contains 'a1763' | |
matches | ~ | 正则匹配.host matches 'acme.(org)' |
bitwise_and | & | 位与操做.tcp.flags & 0x02 |
英文 | 符号 | 意义与示例 |
---|---|---|
and | && | AND逻辑与.ip.src == 10.0.0.5 and tcp.flags.fin |
or | ||
xor | ^^ | XOR逻辑异或.tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29 |
nor | ! | NOT逻辑非 not llc |
[...] | Slice切片操做符 | |
in | 集合操做符 |
一、大括号{}集合操做符
二、中括号[]Slice切片操做符
这么多知识难以记住怎么办,别担忧。wireShark提供了一个显示过滤器的可视化表达式框
打开分析(Analyze)->显示过滤器表达式(Display Filter Expression)
具体操做以下
最后分享一下wireshark解密TLS消息的方法。
原理:经过Chrome浏览器DEBUG日志中的握手信息生成密钥。
步骤:
在mac下操做方法:
/Users/username/sslkeylogs/output.log
export SSLKEYLOGFILE=/Users/username/sslkeylogs/output.log
以上仅是本人一些拙见,欢迎你们一块儿补充讨论。
更多文章请移步楼主github,若是喜欢请点一下star,对做者也是一种鼓励