一、fiddler原理介绍
- Fiddler是位于客户端和服务器端之间的HTTP代理, 它能够记录客户端和服务器之间的所有 HTTP(S)请求,可以针对特定的HTTP(S)请求,分析网络传输的数据,还可以设置断点、修改请求的数据和服务器返回的数据。
- Fiddler在浏览器与服务器之间建立一个代理服务器,Fiddler工作于七层中的应用层,能够捕获通过的HTTP(S)请求。Fiddler启动后会自动将代理服务器设置成本机,默认端口为8888。Fiddler不仅能记录PC上浏览器的网络请求数据,还可以记录同一网络中的其他设备的HTTP(S)请求数据。数据传递流程大致如下:
- 客户端像WEB服务器发送HTTP(S)请求时,请求会先经过代理Fiddler代理服务器。
- Fiddler代理服务器截取客户端的请求报文,再转发到WEB服务器,转发之前可以做一些请求报文参数修改的操作。
- WEB服务器处理完请求以后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文。
- Fiddler处理完响应报文后再返回给客户端。
Fiddler抓取HTTPS原理
现在APP中的数据传输基本上都使用HTTS传输,传输的数据都是经过加密的,这增加了我们分析数据包的难度,还好Fiddler除了可以抓取HTTP数据包,还可以抓取HTTPS数据包。由于HTTPS传输需要使用到CA证书,所以抓取抓取HTTPS数据包时需要做一些特殊配置。Fiddler截取HTTPS报文的流程大致如下:
- 客户端请求建立HTTPS链接,发送客户端支持的加密协议及版本列表等信息给服务器端。
- Fiddler接受客户端请求并伪装成客户端向WEB服务器发送相同的请求。
- WEB服务器收到Fiddler的请求以后,从请求中筛选合适的加密协议。并返回服务器CA证书,证书中包括公钥信息。
- Fiddler收到WEB服务器的响应后保存服务器证书并自签名一个CA证书,伪装成服务器,把该证书下发给客户端。
- 客户端验证证书合法性。(Fiddler能否抓取到HTTPS报文关键看这一步)
- 客户端生产对称密钥,通过证书的公钥加密发送给服务器。
- Fiddler拦截客户端的请求以后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给WEB服务器。此时对称密钥已经泄露了,以后可以使用该秘钥界面客户端和服务器端传输的数据。
- WEB服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。
- Fiddler使用前面获取的对称密钥解密报文。
- 客户端验证数据无误以后HTTPS连接就建立完成,客户端开始向服务器发送使用对称密钥加密的业务数据
- Fiddler使用前面获取的对称密钥解密客户端发送的数据并重新加密转发给客户端。
二、Fiddler主界面介绍:
Fiddler的主界面分为 菜单栏、工具面板、监控面板(会话列表)、辅助标签+工具(请求区、响应区)、状态面板(命令行、状态栏)
1、工具面板
部分常用功能解释:
- 说明注释:可以给对应url添加解释说明,保存之后,方便再次查看;
- 重新请求:可以再次发送改请求,快捷键R,发送多次请求可用快捷键shift+r;
- 删除会话:可以删除选择的会话(delete),可以选择删除所有会话(ctrl+x),可以选择删除图片会话,js会话,css会话等;
- 继续执行:在设置断点之后,点击进行下一步会话;
- 流模式/缓冲模式:
- 流模式(Streaming Mode)Fiddler会即时将HTTP响应的数据返回给应用程序。更接近真实浏览器的性能。时序图更准确,但是不能控制响应;
- 缓冲模式(Buffering Mode)Fiddler直到HTTP响应完成时才将数据返回给应用程序。可以控制响应,修改响应数据。但是时序图有时候会出现异常;
- 全局解码:用于解决请求或响应的乱码问题;
- 监控指定进程:可以直接选择进程,或者点击之后会出现十字符号,移动到对应应用上即可抓取对应程序的会话;
- 查找:点击进行查找,或者使用快捷键ctrl+f,或者使用地下命令行输入【?要查询的内容】;
- 保存会话:选择需要保存的会话(应用场景:筛选出对应会话,保存之后给研发进行分析),点击save即可;
- 编码/解码工具:可以对不同加密内容进行解码,或者对内容进行加密;
2、会话面板
会话面板主功能介绍:
请求类型图标介绍:
会话面板添加列:
在列与列之间使用右键点击,选择最后一项customize columns,添加对应列要显示的内容
添加IP列:
- 运行fiddler,菜单,Rules->Customize Rules…或者使用快捷键ctrl+r
- Ctrl+F查找“static function Main()”字符串,然后添加下面这行代码(代码中的ServerIP,为列名,可以自己定义名字)FiddlerObject.UI.lvSessions.AddBoundColumn(“ServerIP”, 120, “X-HostIP”);
- 保存CustomRules.js或者点击“Save Script”按钮,如下图所示
4.重启fiddler,显示添加成功
3、命令行QuickExec
常用命令
1、help:打开官方的使用页面介绍,所有的命令都会列出来
2、?关键词:搜索文本
3、快速找到某个请求方式的所有请求
=get,找到所有get请求
=post,找到所有post请求
快速找到某个状态码的所有请求
=200 找到所有状态码为200的请求
=404 找到所有状态码为404的请求
4、@host:快速查找该host的接口
5、> < 某个数值:表示高亮所有尺寸大于或小于该数值的会话
6、给单个接口打断点
bpu url地址:对这个url地址打断点,before response(再次输入bpu即可解除请求断点)
bpafter url地址:对这个url地址打断点 after response (再次输入bpafter即可解除响应断点)
bps stutus码:拦截某个状态码的所有接口
bpv/bpm method:拦截某个请求方式的接口
4、状态栏
打开/关闭断点:关闭状态—>请求断点—>响应断点—>关闭状态
三、主功能介绍(辅助标签+工具)
统计:主要是请求的性能,统计响应时间、渲染时间等(如DNS解析的时间,建立TCP/IP连接的时间消耗等信息);