Fiddler 初学者工具使用
一、概述
Fiddler是一款免费且功能强大的数据包抓取软件。它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。fiddler包含了一个强大的基于事件脚本的子系统,并且能够使用.net框架语言扩展。
二、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处理完响应报文后再返回给客户端。
三、下载安装与配置
1.可以到官网下载Fiddler免费安装包:点击下载
2.下载安装Fiddler后,安装插件FiddlerCertmaker。
3.Fiddler基本配置
如果只是需要监听本机浏览器HTTP数据包的话不需要做任何额外配置,打开Fiddler即可直接使用。一般我们需要监听远程终端设备的网络请求,需要做以下配置。打开Fiddler,在菜单栏中选择Tools->Options->Connections。输入监听端口(默认是8888),选择Allow remotecomputers to connect,点击确认然后重启Fiddler。
四、手机连接代理
1.http请求
打开手机网络设置,选择跟Fiddler主机在统一网络,打开wifi设置界面,进入wifi的高级设置(不同手机设置不一样,有一些手机长按选中的wifi名称可以出来,有一些手机是点击wifi名称后面的按钮,自己尝试)。Fiddler本身就是代理服务器,在wifi高级设置中的代理栏下面选择手动设置,设置输入Fiddler主机的IP地址(上一步显示的IP)和监听端口号(前面默认8888那个),点击确认。
这些配置按成以后,你在APP中进行有网络请求的操作,即可在Fiddler中看到。
在右边的Inspectors窗口中可以看到这个请求的请求报文和响应报文信息。
以上配置只能监听到HTTP报文,对于HTTPS报文无法显示内容,还需要做其他配置。
2.https请求
前面也讲了,HTTPS数据报文传输的时候涉及到证书及数据加密的问题,所以Fiddler需要抓取HTTPS报文的话还需要做其他配置。
首先还是打开Fiddler配置:Tools->Options->HTTPS:
勾选Capture HTTPS CONNECTS和Decrypt HTTPS traffic选项,如果只是想抓取本机或者远程终端的数据报文,可以在…from all processes这个下拉框中选择。这里还有一点需要注意的就是,低版本的Fiddler自签名的CA证书有一些问题,后面导入到手机上时无效,这里就需要安装上面说的FiddlerCertMaker插件。安装后要重启Fiddler,如果安装成功在上图Certificates generated by CertEnroo engine的位置的内容就会显示安装的FiddlerCertMaker插件信息。
设置完成以后点击OK,重启Fiddler。此时在手机端操作一些有https传输的app就会发现可以看到传输的内容,但是有局限性,只有设置了信任所有证书的APP中的HTTPS报文才能查看到,这类APP是非常不安全的。如果需要抓取大部分HTTPS报文怎么办呢?
大家都知道手机系统中集成了系统认为可信的CA根证书,如果服务器的证书是这些机构颁发了,HTTPS请求时系统才认为是安全的,否则SSL握手失败(前提是APP中使用系统默认证书信任机机制)。Fiddler自签名证书肯定不在系统信任的证书列表中,那怎么办呢?我们可以在手机中把Fiddler自签名的证书导入到信任证书列表中就可以解决这个问题了。
接下来打开手机中的浏览器,在地址栏输入Fiddler监听的IP:端口,比如:192.168.1.106:8888。
点击页面中的FiddlerRoot Certificate,下载并安装证书(如果下载了没有自动提示安装,可进入设置->系统安全->从存储设备安装中手动安装)。

输入证书名称,这里命名fiddler,点击确认。如果安装成功在系统安全->信任的凭据->用户中可以看到刚才安装的证书(如果证书名称是乱码,可能是Fiddler生成的证书有问题,需要安装FiddlerCertMaker插件,重新操作)。
我们在手机端打开有HTTPS链接的APP发现可以抓取HTTPS中的数据报文了。
五、fiddler工具栏常用功能介绍
1.备注功能,选中一个会话,为当前请求增加备注
2.回放功能,选中一个会话,点击回放回放该会话,回放在键盘的快捷键是R键,选择一个会话点击R键可以直接回放该会话
3.调试debug,点击该按钮可以对debug断点进行调试,让断点继续往下走
3.1 添加断点如下图所示,点击底部状态下图所示位置开始增加断点
3.2 点击后会显示一个箭头朝上的图标,表示请求断点,箭头朝下,则是响应断点
4.流模式和缓冲模式切换,默认是缓冲模式,默认所有的http请求数据都返回给fiddler它才会在控制面板展示出来
5.解码请求
6.过滤请求
具体操作如下
7.查找功能,快捷键ctrl+F
8.计时器
六、命令行和状态栏
命令行在Fiddler的左下方的黑色窗口,也叫QuickExec,可以调用 Fiddler的内置命令。
这一系列内置的函数用于筛选和操作会话列表中的session(会话)。
通过快捷键Alt + q可以将焦点定位到命令行输入框(小黑框)中。
当焦点在命令输入框中时,快捷键Ctrl + i可以快速插入当前选中会话的 URL。
如何学习Fiddler的内置命令,看提示:type HELP to learn more,也就是直接在命令行中输入help.
会跳转到官方的帮助文档中https://docs.telerik.com/fiddler/knowledgebase/quickexec
6.1 几个常用的命令:
(1)?text命令
问号(?)后边跟一个字符串,Fiddler 将所有会话中存在该字符串的会话进行匹配,并全部高亮显示。
(2)>size 和 <size命令
大于号(>)和小于号(<)后边跟一个数值,表示高亮所有尺寸大于或小于该数值的会话。
(3)=status命令
选择响应状态等于给定状态的所有HTTP请求。
例如,选择所有状态为200的HTTP请求:=200。
(4)@host命令
选择包含指定 HOST 的全部 HTTP请求。
例如:@csdn.net,选择host包含csdn.net的所有请求。
(5)Bpafter,Bps,bpv,bpm,bpu命令
这几个命令主要用于批量设置断点
Bpafter xxx:中断 URL 包含指定字符的全部 session 响应。
Bps xxx:中断 HTTP 响应状态为指定字符的全部 session 响应。
Bpv xxx:中断指定请求方式的全部 session 响应。
Bpm xxx:中断指定请求方式的全部 session 响应。等同于bpv xxx。
Bpu xxx:与bpafter类似。
更多的其他命令可以参考Fiddler官网手册。
6.2 状态栏
状态栏在Fiddler工具的最下端,如下图:
说明:
Capturing:显示Capturing表示当前是捕获状态,可以捕获请求,也就是替换了系统代理。
空白表示当前为非捕获状态,请求不会被捕获,点击进行切换。
可以用快捷键 F12 切换该区域。
显示当前捕捉哪些进程的通讯
All Processes :显示捕获所有进程的请求。
Web Browsers :显示捕获 Web 浏览器的请求。
Non-Browser : 显示捕获非 Web 浏览器的请求。
Hide All :隐藏所有请求。
显示当前断点设置状态,通过鼠标点击切换。
默认为不设置断点。(没有显示)
所有请求在断点处被暂停。(红色上箭头图标)
所有响应在断点处被暂停。(红色上箭头图标)
显示当前共捕获了多少 session。
如:显示66,表示共捕获了 66个session。
如果选中了一些session,会显示共选择了多少 session 及 session 总数(如:22/66,表示当前选择22个 session,共66个 session)
描述当前状态或者是一些附加状态。
如果是刚打开 Fiddler,会显示什么时间加载了 CustomRules.js;
如果选择了一个 Session,会显示该 Session 的 URL;
如果在 QuickExec 命令行输入一个命令,就会显示命令相关信息。
七、检查器Inspectors
Inspectors意思是检查器。Inspectors可以使用多种方式,查看请求的请求报文和响应报文相关信息。
Inspectors页签分为上下两部分,上部显示的是发出的请求相关信息,下部显示的是接收的响应相关信息。
7.1、请求报文
Inspectors面板中请求报文部分,如下图:
-
Headers – 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
-
Textview – 显示 POST 请求的 body 部分为文本。
-
Syntaxview – 为Textview的加强版,查看语法高亮的请求内容。加上了行数标识,鼠标右键的菜单中,相较Textview多了一些功能,如Json、XML格式化,查找替换等。
-
WebForms – 显示请求的 GET 参数 和 POST body 内容,特别说明,这里 body 应该是 application/x-www-form-urlen-coded 格式。
-
HexView – 用十六进制数据显示请求。
-
Auth – 显示 header 中的 Proxy-Authorization 和 Authorization 信息。
-
Cookies – 请求发送的cookies信息。
-
Raw – 将整个请求显示为纯文本。
-
Json – 如果请求的 body 是 json 格式,就是用分级的 Json 来显示它。
-
XML – 如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它。
7.2、响应报文
Inspectors面板中响应报文部分,如下图:
- Transformer – Transformer选项是显示响应的编码信息
- Headers – 用分级视图显示响应的 header。
- TextView – 使用文本显示相应的 body。
- Syntaxview – 为Textview的加强版,查看语法高亮的响应内容。
- ImageVies – 如果请求是图片资源,显示响应的图片
- 左侧灰色区域会显示图片的大小、宽高、文件格式等信息,在下方还可以选择缩放模式:Autoshrink(自动缩放)、Scale to fit(缩放以适应显示区域大小)、No Scaling(无缩放)。
- HexView – 用十六进制数据显示响应。
- WebView – 响应在 Web 浏览器中的预览效果。
- Auth – 显示响应 header 中的 Proxy-Authorization 和 Authorization 信息。
- Caching – 显示此请求的缓存信息。
- Cookies – 显示此请求的cookies信息,私密 P3P Header 信息。
说明响应报文中Transformer选项
Transformer选项是显示响应的编码信息,如下图:表示可以选择几种压缩方式来提供性能,图中是默认没有选用任何压缩方式。
抓取访问百度请求之后,发现响应头使用的是Transfer-Encoding:chunked,是用chunked(分块传输)方式传送数据长度值。
八、自动响应器
1.点击autoresponder,勾选enable rules和unmatched requests passthrough
2.替换步骤
(1)把要替换的会话拉取到空白处,或者选中要替换的内容点击add rule,
(2)选中添加的rule,
(3)在rule editor中填写规则:原接口和替换的规则,替换的规则可以是文件,也可以是状态
(4)点击save
(5)重新刷新浏览器,页面内容更改为替换的内容
注意:原接口必须是fiddler抓到的接口
3.更改响应结果:可用于mock
把要修改的会话拉取到autoresponder空白处,
选中右键点击edit response,打开后在raw中可以修改内容,然后保存。
勾选生效
九、composer区域,是测试接口的界面
相关说明:
- 请求方式:点开可以勾选请求协议是get、post等
- url地址栏:输入请求的url地址
- 请求头:第三块区域可以输入请求头信息
- 请求body:post请求在此区域输入body信息
- 执行:Execute按钮点击后就可以执行请求了
- http版本:可以勾选http版本
- 请求历史:执行完成后会在右侧History区域生成历史记录
重复的并发测试:
在拦截到的url上点击鼠标右键,->replay -> shift+reissue request 设置访问次数,比如100,然后点OK即可。
十、过滤器
10.1域名过滤
抓取到的请求显示如下:
二级域名的过滤,输入*.baidu.com的形式,所有在baidu.com域名下的所有请求都会被过滤出来
10.2进程过滤
为了不和域名过滤器有所冲突,先把进程的过滤关闭。如下图,选择(1)No Host Filter
进程的过滤操作如下: