之前小帅b给你介绍了好几个抓包工具以及使用,而今天要给你介绍的这个抓包工具——Wireshark,它相对来说更加牛逼一些,可能有些 b 友听说过它了吧。


你听说过 Wireshark 抓包么?_java

先吹一波:它支持上百种协议的解密嗅探分析,在互联网上发生的事情,多微小的细节都能通过它分析出来,而且它不仅可以实时抓包,还可以离线分析,它还提供了 GUI 界面工具,你在其它大部分的抓包工具中抓到的数据文件都能拿来这里分析一波,而且,Wireshark 是跨平台的,市面上大多数系统都能运行。


你听说过 Wireshark 抓包么?_java_02


吹了这么多,还是先来认识下 Wireshark 吧。
首先当然是要安装一波,你可以到以下链接中根据你的系统版本进行相应的安装
https://www.wireshark.org/download.html 
如果你网络有问题的话,没关系,我已经帮你把它们的最新版本都下载下来了,你可以在公众号后台发送 4 获取到相应的版本:

你听说过 Wireshark 抓包么?_java_03



安装完成之后,打开它,差不多长这个鸟样:


你听说过 Wireshark 抓包么?_java_04




我来给你标注一下每个模块是干什么用的,最上面的这几栏分别是:


你听说过 Wireshark 抓包么?_java_05



这个一看就知道,而当你抓包的时候,界面会变成这样:




再来标注一下这几个面板都是干啥的:



先来简单抓一波包,感受一下流程。
首先我们要开启 wireshark 的数据访问监听,你可以使用快捷键 Ctrl + E,或者点击工具栏的第一个图标:


你听说过 Wireshark 抓包么?_java_06



我们先过滤一下 HTTP 的请求:

你听说过 Wireshark 抓包么?_java_07



然后随便百度一下图片:


你听说过 Wireshark 抓包么?_java_08



这时候 wireshark 就监听到请求的数据包了:



你听说过 Wireshark 抓包么?_java_09



在数据包列表中,每个 item 所表示的都一目了然,从左到右分别是请求的时间、请求的 IP 、响应的IP、请求的协议、内容长度、以及相关信息:


你听说过 Wireshark 抓包么?_java_10



每条数据下方都会有具体信息的显示,你也可以直接双击具体的数据包,这时候会弹出一个窗口,专门用来展示具体数据包的相关传输信息:


你听说过 Wireshark 抓包么?_java_11




我们来看看应用层抓到的信息:


你听说过 Wireshark 抓包么?_java_12



可以看到,这里我们是通过 Get 请求,其中 Http 协议参数以及请求头的相关信息都可以在应用层这里获取。
响应的信息:


你听说过 Wireshark 抓包么?_java_13



那么除了 Hypertext Transfer Protocol 之外,上面的那几个显示的都是什么内容呢?



我们一个一个来,其中的 Frame 里面主要是展示这个数据包报文的具体信息:




比如这里就展示了网卡信息,抓取的时间,数据的大小,协议等信息。
因为网络数据包的传输是分层的,所以这里的以太网 Enternet II 表示的是数据链路层,在这里可以看到的是源 mac 地址和目的 mac 地址:





接下来就是 IP 网络层,这里可以看到 IP 协议头的一些信息:

你听说过 Wireshark 抓包么?_java_14



接下来就是 TCP 传输层,在这里可以看到 TCP 数据包的一些信息,比如源端口,目的端口,序列号,Ack确认等:


你听说过 Wireshark 抓包么?_java_15



最后就是我们刚刚看到的 HTTP 协议应用层:

你听说过 Wireshark 抓包么?_java_16



大概认识了 Wireshark 之后,接下来我再跟你说说它的常用功能
我们刚刚输入 http 进行了显示过滤:


你听说过 Wireshark 抓包么?_java_17
实际上 Wireshark 的过滤很强大,可以定义不同的参数过滤,你可以点击菜单栏的:
View-internals-Support Protocols
在这里可以看到各种协议的过滤字段:

你听说过 Wireshark 抓包么?_java_18



比如 http 协议的过滤字段:

你听说过 Wireshark 抓包么?_java_19



通过 Filter 字段中的值,就可以直接用它来定义过滤了,比如过滤 fxxkpython.com 的请求就可以这样:

http.host == fxxkpython.com

你听说过 Wireshark 抓包么?_java_20



过滤 80 端口的数据:



另一种过滤的方式是在抓取的时候过滤,也就是说,我们只要抓取某一范围的数据,而不是网卡所请求的所有数据,那么这个时候你可以使用快捷键 Ctrl + K,打开 input 面板下面的搜索框里定义,比这里只定义分析 fxxkpython.com 的数据:




另外,你还可以选择不同网卡设备的抓取:




设置完之后点击 start 就能开始根据你定义的规则进行抓包了。

在抓包的时候你会看到数据包列表各种颜色:

你听说过 Wireshark 抓包么?_java_21



这些不同颜色代表不同的协议,你可以在 View-Coloring Rules 中自定义:


你听说过 Wireshark 抓包么?_java_22



你点击具体的数据包的时候,在数据列表的左侧会出现类似这样的图:



你听说过 Wireshark 抓包么?_java_23




被框住的数据包表示一整个会话,其中的虚线表示与会话无关,而 --> 代表的是请求, <-- 代表的是返回。
而 √ 表示的是报文的确认:

你听说过 Wireshark 抓包么?_java_24



如果你想晚点再去分析数据包的话,你也可以把你想要的数据包给导出到本地,点击菜单栏的 File--Export Specified Packets:

你听说过 Wireshark 抓包么?_java_25



等你想要分析了的时候,打开 Wireshark, 导入文件就可以继续分析了:


你听说过 Wireshark 抓包么?_java_26

你听说过 Wireshark 抓包么?_java_27




ok,关于 Wireshark 的基本使用介绍就先到这里,其实不应该只把它看成一个抓包工具,它还有很多好玩的地方,比如在学习网络的时候它就是一个不错的辅助学习工具,感兴趣可以去了解一下。官网在这:
https://www.wireshark.org/ 
那么,我们下回见啦,peace!