快速上手Fiddler
Fiddler的安装
直接从Fiddler | Web Debugging Proxy and Troubleshooting Solutions (telerik.com)官方下载安装Fiddler,选择适合自己操作系统的版本即可。
这篇文档使用的是Windows上的Fiddler Classic版本。
快速上手抓包
Fiddler的使用非常的简单,对于市面上的绝大部分浏览器,只需要打开 File > Capture Traffic就可以,
也可以使用快捷键F12,或者点击左下角的
来切换是否抓取目前浏览器上的数据。对于Firefox则需要一些额外的配置,Fiddler支持使用 FiddlerHook来抓取数据,或者也可以通过设置浏览器的SystemProxy来抓取数据。
在开始抓包之前,为了保证所有的请求都被发送和被抓取到,应该清除本地的浏览器缓存,尤其是”Cached images and files”或者cookies,浏览器缓存通常可以帮助网站更快地加载,但有时它可能阻止你看到网页的最新版本,同时也会导致某些请求不被发送。在某些情况下,旧的或损坏的缓存甚至可能导致网页加载不正确或完全无法加载。
Fiddler默认不会捕获和解密安全的HTTPS流量。若要捕获通过HTTPS协议发送的数据,需要设置启用HTTPS流量解密。
启用HTTPS流量解密
点击Tools > Options > HTTPS.
勾选Decrypt HTTPS Traffic

这里还有一些其他的配置,比如抓取的网络请求类型,是否忽略服务器证书错误,不解密指定主机的流量。、
Decrypt HTTPS traffic中的选项说明:
1 | |
然后,我们需要生成证书用于加密和解密,这样Fiddler才能够解析HTTPS请求里的内容。
在Actions里选择Trust Root Certificate,接下来Fiddler会自动把证书添加到系统信任证书里。或者也可以选择导出证书到桌面,然后导入到需要进行抓包的浏览器中。以Edge浏览器为例,首先Export Root Certificate to Desktop,然后Settings > Privacy > Security > Manage certificates在弹出的证书管理窗口中选择Trusted Root Certifications Authorities标签页,导入刚刚导出到桌面的证书即可。
接下来Fiddler应该就可以正常抓取HTTPS流量并且正常解析了。
使用界面

界面左侧为Web Sessions List,在这里我们可以看到每个请求的ID号、HTTP状态码、协议、主机名、请求资源位置、请求大小、缓存过期时间或缓存值、请求响应的类型、发送请求的进程ID、自定义注释以及Web会话的任何自定义列。

点击任意Web Session,右侧是详情和数据统计面板。
- Statistics是关于HTTP请求的性能(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)以及数据分析

- Inspectors用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息

- AutoResponder可用于拦截某一请求,即按自己添加的指定规则重定向到本地的资源或Fiddler资源,从而代替服务器响应。比如我们在这里添加一条rule,当打开https://cn.bing.com/?mkt=zh-CN链接的时候返回http://www.example.com这个结果
这时候我们去访问rule里这个链接,就会返回被劫持之后的结果。
Composer自定义请求发送服务器,Parsed模式下你只需要提供简单的URLS地址即可,也可以直接把左侧Sessions List里的session拖动到这里从而构成请求,点击Execute

在左侧就可以看到这个请求

Fiddler Orchestra
这是一个用于监听抓取APP的插件,原理是让APP连接到Orchestra服务后,Orchestra在正常转发流量的同时再复制一份流量给Fiddler,就可以让Fiddler抓取到相应的流量。
Fiddler Script 包含了一个脚本文件可以自动修改Http Request 和Response.这样我们就不需要手动地下”断点”去修改了,该脚本中提供了许多Hook以及在指定的事件节点对网络上的请求进行修改的方法。修改细则可以看Understanding FiddlerScript (telerik.com)
Log 运行的log。
Filters 过滤规则,通过设置过滤规则来过滤所需的http请求,最常用的过滤条件:Zone和Host。


- Timeline 请求响应时间,在左侧会话窗口点击一个或多个请求,Timeline 便会可视化指定内容从服务端传输到客户端的时间。
断点功能
在这里通过点击可以设置断点,支持截获全部请求、截获全部请求响应。也可以使用QuickExec命令设置断点,更灵活一些。

通过断点我们可以在Sessions List中选择被中断的会话,然后对其中的内容进行修改,比如Forms等。
Fiddler HTTPS 抓包原理

Fiddler 是浏览器的服务器,而 Fiddler 是服务器的客户端。在没有 Fiddler 的情况下,浏览器拥有的公开证书来自服务器,服务器保存私有证书。服务器使用私有证书对数据进行加密,浏览器使用公有证书对数据解密。
我们在中间添加了一个 Fiddler 作为代理,那么此时客户端拥有的公共证书应该来自 Fiddler,而 Fiddler 拥有私有证书的同时,还拥有来自服务器的公共证书。浏览器和服务器交互如下:
请求:浏览器使用 Fiddler 公共证书将数据加密,发送给 Fiddler。Fiddler 使用私有证书解密,然后将内容采用服务器的公共证书再次加密,发送给服务器,服务器使用自己的私有证书进行解密。
响应:服务器使用私有证书对响应数据加密,然后发送给 Fiddler。Fiddler 将收到的数据使用服务器的公共证书解密,然后再次使用自己的私有证书加密,将再次加密后的数据发送为浏览器,浏览器收到后使用 Fiddler 的公共证书进行解密,将解密的内容最终展现给用户。
与Wireshark的比较
Wireshark对底层协议的支持更好,一到七层都能抓,对于协议细节内容的Debug更有帮助,每个数据包就是一个完整的帧,同时可以结合tcpdump工具去分析服务器之间的通讯。但是wireshark解密HTTPS数据包比较麻烦。
Fiddler主要使用场景还是偏向业务层面,对于移动端的配置也比较方便,一般是用于接口测试。