关于抓包咱们平时使用的最多的可能就是Chrome浏览器自带的Network面板了(浏览器上F12就会弹出来)。另外还有一大部分人使用Fiddler,Fiddler也是一款很是优秀的抓包工具。可是这二者只能对于HTTP和HTTPS进行抓包分析。若是想要对更底层的协议进行分析(如TCP的三次握手)就须要用到咱们今天来讲的工具Wireshark,一样是一款特牛逼的软件,且开源免费自带中文语言包。html
Wireshark开源地址:https://github.com/wireshark/wireshark
Wireshark下载地址:https://www.wireshark.org/download,这里有它的历史版本。今天咱们就来安装最新版本3.2.0,一路默认“下一步”安装大法就能够了。安装好后默认就是中文版。git
你会发现第一部份内容跳到很是快,根本无法找到本身想要分析的内容。这里咱们可使用显示过滤器,只显示咱们想要看的内容。
在显示过滤器填入http.request.method == "GET"
,而后用Chrome浏览器访问http://fanyi-pro.baidu.com/index(特地找的一个http网站)
github
除了过滤Get请求外,经常使用的显示过滤器还有:windows
显示过滤器是指捕获了全部通过网卡的封包,而后在显示的时候进行过滤显示。明显,若是流量过大会致使捕获的内容过多,筛选变得卡顿。因此,咱们能够在捕获阶段的时候就过滤掉无用的流量。浏览器
咱们看到第一部份内容,封包列表有各类不一样的背景色。其不一样颜色表明不一样意义。淡蓝色代码udp协议,红字黑底表明有问题的封包。更多具体规则可 识图->着色规则
服务器
下面的动图是各层对应的数据
从上面的动图咱们能够发现,应用层到传输层再到网络层到以太网层,其对应的数据包也在对应的往前移。
咱们能够想象一下,应用层数据往上传递,每通过一层就包上一个新得信封。等数据送到目的主机,而后每往下一层就拆一个信封,最后拆到应用层也就是最开始得数据了。
网络
对于三次握手我想不少人只听过没见过,那么今天咱们就来见见。
三次握手是过程: 一、客户端发送同步SYN标志位和序列号Seq(a) 二、服务器回复SYNACK、Seq(b)、Ack(a+1)三、客户端回复SYN、Seq(a+1)、Ack(b+1)
那么在Wireshark中怎么观察呢。咱们仍是以http://fanyi-pro.baidu.com/
地址为例。首先打开Chrome输入地址,F12打开浏览器的Network面板,刷新页面在面板中找到服务器IP。 打开Wireshark开始抓包,并在显示过滤器只显示IP地址对应的数据。
tcp
除了三次握手,还有对应的四次挥手。不知道是否是我网络很差,“挥手”的时候总是出现重传错误干扰(就是前面说的那种红字黑底封包)。下面是我本地环境本身写代码的抓包效果。
与握手不一样是挥手是发送FIN标志位断开链接,其余都差很少。
Wireshark抓包以下
工具
由于HTTPS是HTTP的基础下加入SSL加密层,因此Wireshark抓到是密文。也就看不到请求参数和响应结果,甚至连url连接都是密文。
要想在Wireshark抓包明文数据,可进行以下操做:网站
若是是HTTP2能够进行http2.headers.method == "GET"
或http2.headers.method == "POST"
,若是是HTTP能够进行http.request.method == "GET"
过滤。
Wireshark除了能够抓包TCP一样也能够对UDP进行抓包。
其实这个抓取的是BACnet报文,而这个BACnetIP正是基于UDP的一个协议。
授人以鱼不如授人以渔。Wireshark不只能够对咱们常见的HTTP、HTTPS、TCP等协议进行抓包分析,还能对工业上的BACnet、ModBus、S7Communication和其余PLC协议进行报文抓包分析。如这位大佬就经过抓包破解了西门子PLC没有公开的协议。
但愿有兴趣的朋友能够一块儿来完善IoTClient组件。