咱们平时在开发对接的时候,前端和后端都习惯使用浏览器F12大法,通过network一栏查看接口通信情况,到底是谁的锅立马就能弄清楚。
浏览器与后端服务通信的一切都能在这个窗口看的一清二楚,不管是网络连接失败,还是后端报错,抑或是跨域问题,乃至数据格式不对,通过这里,都能找到答案。
可如果我们要分析的程序不在浏览器里面,又如何能看到他们的网络通信呢?这个时候就需要抓包了。
抓包是咱们程序员必备的基础技能,通过捕获计算机网卡的数据,来系统而全面的分析流经网卡的通信流量。
今天就来介绍几个抓包的神器,介绍一些你可能不知道的功能。
Wireshark
Wireshark可以说是抓包界的一哥了,二十年的老牌子,你值得信赖。
Wireshark支持几乎你知道的和你不知道的全部通信协议的分析,TCP/IP整个家族就不说了,这是基本要求,就连像Redis、MySQL、Mongo、ES等等这些上层应用的协议都能给你安排的明明白白,这就厉害了。
Wireshark优秀的架构设计使得它可以非常轻松的增加扩展以应对不断出现的新的应用层协议。
这是Wireshark的主界面,除上面的工具栏外,从上到下分为三个区域:
数据包列表
数据包协议解析树
数据包原始数据
过滤
有时候一抓就是一大把数据,全部堆在一起,想要找到我们需要的,犹如大海捞针,这个时候你就需要过滤了。
在最上方,有一个搜索框,可以用来输入Wireshark的过滤表达式,比如我只想看其中的HTTP数据包,只需输入“http”即可。
你可以通过IP、端口、协议等多种组合式过滤,如下面的一些例子:
eth.src[0:3] == 00:00:83
ip.addr == 192.168.0.1
tcp.flags.syn == 1
tcp.port in {443 4430..4434}
http.request.uri == "https://www.wireshark.org/"
完整的过滤表达式语法规则请参考:
https://www.wireshark.org/docs/wsug_html/#ChWorkBuildDisplayFilterSection
会话
不同的人有不同的使用习惯,像我就不太喜欢上面图中那样所有数据包堆在一起,看起来非常的杂乱。
没关系,Wireshark提供了会话的分析视角,以会话的形式来将所有数据包分门别类,这一下清晰了不少。
通过菜单 统计(Statistics)-