1 什么是fiddler?
1.1 概念
fiddler是位于客户端和服务器端的HTTP代理,目前最常用的抓包或是web调试工具之一。可以通过fiddler查看浏览器的所有HTTP/HTTPS流量、查看和分析请求内容细节、伪造客户端请求和服务端响应信息、测试网站性能、解密HTTPS的web会话等。
1.2 使用场景
接口调试、接口测试、线上环境调试、web性能分析、判断前后端BUG、开发环境hosts配置、mock测试、弱网断网测试。
1.3 工作原理
客户端和服务器建立了一个HTTP通信过程,如果要监听这个请求,就可以使用例如fiddler这样的代理工具。 谷歌浏览器和IE会默认读取系统代理,fiddler一打开就会设置一个系统代理。
-
Fiddler设置系统代理: -
打开Fiddler后代理设置: -
Fiddler关闭之后的代理设置:
2 HTTP协议
https://blog.csdn.net/qq_38684868/article/details/122182383
3 Fiddler工具详解
3.1 Fiddler 菜单栏
(1)file 菜单
- Capture Traffic:控制是否把Fiddler注册为系统代理,当把Fiddler注册为系统代理时,所有依赖于WinINET代理的应用(如IE浏览器和其他浏览器)会把Web请求发送给Fiddler
- New Viewer:打开一个新的fiddler窗口
- Load Archive:加载之前保存好的包
- Recent Archive:查看最近打开的包
- Save:保存所有会话,可以针对性选择,比如保存请求的会话,响应的会话,或者仅保存请求头
- Import Sessions:导入Fiddler导出来的会话格式文件,新版Fiddler还可以导入wireshark抓的数据包文件,还有浏览器导出的格式文件,例如HAR格式等等
- Export Sessions:导出所有会话或者选中的会话
- Exit:取消把Fiddler注册为系统代理,并关闭工具栏
(2)Edit菜单
- Copy:复制选中Session的某些信息
- Remove:从Web Session列表中删除全部、删除选中的或未选中的Session
- Select All:选中Sessions列表的所有内容
- Paste as Session:基于剪贴板上的内容,生成一个或多个模拟的Web Session
- Mark:选择一种颜色来标记Web Session列表中选中的Session
- Unlock for Editing:因为Fiddler抓到包本来是不能被更改的,只有使用了此功能解锁并打开编辑的功能才能对抓到的数据包进行编辑重放
- Find Session…:选中会话在会话中查找关键字,查找到的关键字默认会被标记为黄色
(3)Rules菜单
- Hide Image Request:在会话里面隐藏图片的请求
- Hide CONNECTS:在会话里面隐藏CONNECTs的请求
- Automatic Breakpoints:是否会自动在Before Requests或After Responses处设置断点。Ignore Image触发器控制这些断点是否作用于图片请求
- Customize Rules…:使用配置的脚本编辑器打开当前的FiddlerScript文件,自定义Fiddler
- Require Proxy Authentication:所有未提交Proxy-Authorization请求头的请求会返回HTTP/407响应,要求客户端安装证书,这个规则可用于测试HTTP客户端,确保这些规则在有证书的客户端服务器上可以正常工作。
- Apply GZIP Encoding:在抓包的过程中启用GZIP编码(只要请求包含具有gzip标识的Accept-Encoding请求头,就会对除了图片以外的所有响应使用GZIP HTTP进行压缩)。该规则用于测试使用GZIP选项支持的客户端是否真正对内容进行压缩。该选项还支持性能调优,并且计算传输的压缩后的数据流的字节数。
- Remove All Encoding:删除所有请求和响应的HTTP内容编码和传输编码
Hide 304s:隐藏包含HTTP/304 Not Modified状态的响应的所有Session - Request Japanese Content:把所有请求的Accept-Encoding请求头设置或替换为ja 标识,表示客户端希望响应以日语形式发送
- User-Agents:把所有请求的User-Agent请求头设置或替换成指定值。
- Performance:提供影响性能的简单选项。
- Performance->Simulate Modem Speeds: 模拟调制解调器速度。
- Performance->Disable Catching:设置禁用缓存。
- Performance->Cache Aways Fresh:会自动响应所有包含HTTP/304响应的有条件HTTP请求,表示客户端的缓存是最新的。当访问的站点无法正确的设置缓存失效日期时,可以极大的提高性能。
(3)Tool菜单
- Options…:打开Fiddler Options窗口,配置Fiddler的各种功能选项,包括代理功能,字体功能,抓包功能,扩展功能等
- WinINET Options…:打开IE的Internet Options窗口
- Clear WinINET Cache:清空IE和其他应用中所使用的WinINET缓存中的所有文件
- Clear WinINET Cookies:清空IE和其他应用中所发送的WinINET Cookie,Session的Cookies还是保持不变
- TextWizard…:启动TextWizard窗口,支持对文本进行编码和解码
- Compare Session:比较选中的两个会话,使用这个功能需要另外安装工具,只有当选中Web Session列表中的两个Session时才有效。
- Reset Script:重置Fiddler Script
- Sandbox:打开Fiddler官方提供的一个沙盒环境:http://webdbg.com/sandbox/
- View IE Cache:查看IE浏览器的缓存
- New Session Clipboard…:打开一个Session的剪贴板,用于加载使用Fiddler保存好的Session
- HOSTS…:打开Fiddler的Host Remapping工具,这个功能不是真的更改本地HOSTS,而是隐射的功能
(3)View菜单
-
Show Toolbar:Fiddler工具栏是否可见 -
Default Layout:默认布局 -
Stacked Layout:堆叠形式布局 -
Wide Layout:宽版面布局 -
Tabs:查看隐藏的功能点,有Fiddler的属性,自动保存,API测试这三个功能点 -
Statistics:点击此功能会直接到达右边的统计功能位置 -
Inspectors:点击此功能会直接到右边的检查功能位置 -
Composer:点击此功能会直接到达右边的自定义请求的功能点 -
Minimize to Tray:最小化Fiddler到系统托盘中 -
Squish Session Lis:控制Web Session列表是否水平收缩 -
AutoScroll Session list:控制当添加新的Session时,Fiddler是否会自动滚动到Session列表的底部 -
Refresh:刷新 -
step1: Fiddler截获客户端浏览器发送给服务器的https请求,此时还未建立握手。 -
step2: Fiddler向服务器发送请求进行握手,获取到服务器的CA证书,用根证书公钥进行解密,验证服务器数据签名,获取到服务器CA证书公钥。 -
step3: Fiddler伪造自己的CA证书,冒充服务器证书传递给客户端浏览器,客户端浏览器做跟Fiddler一样的事。 -
step4: 客户端浏览器生成https通信用的对称密钥,用Fiddler伪造的证书公钥加密后传递给服务器,被Fiddler截获。 -
step5: Fiddler将截获的密文用自己伪造证书的私钥解开,获得https通信用的对称密钥。 -
step6: Fiddler将对称密钥用服务器证书公钥加密传递给服务器,服务器用私钥解开后建立信任,握手完成,用对称密钥加密消息,开始通信。 -
step7: Fiddler接收到服务器发送的密文,用对称密钥解开,获得服务器发送的明文。再次加密, 发送给客户端浏览器。 -
step8: 客户端向服务器发送消息,用对称密钥加密,被Fidller截获后,解密获得明文。
3.2 Fiddler工具栏
3.3 Fiddler会话列表
(1)抓取到的请求包含的信息 fiddler抓取到的每条HTTP请求(每一条称为一个session),主要包含了请求ID、状态码、协议、主机名、URL、内容类型、body大小、进程信息、备注等。
- #:HTTP Request的顺序,从1开始,按照页面加载请求的顺序递增
- URL:请求的服务器路径和文件名,也包括GET参数
- Result:HTTP响应的状态码
- Protocol:请求使用的协议(如http/https/ftp)
- Host:请求地址的域名
- Body:请求的大小,以byte为单位
- Caching:请求的缓存过期时间或缓存控制,header等值
- Content-Type:请求响应的类型(Content-Type)
- Process:发出此请求的Windows进程及进程ID
- Comments:用户通过脚本或者右键菜单给此session增加的备注
- Custom:用户通过脚本设置的自定义值
(2)会话的颜色
- 红色:HTTP状态错误
- 黄色:HTTP状态认证
- 灰色:表示数据流类型为CONNECT或表示响应类型为图像
- 紫色:表示响应类型为CSS
- 蓝色:表示响应类型为HTML
- 绿色:表示响应类型为script
(3)列表最左侧图标 (4)会话列表应用设置
1) 会话列表增加IP:
Fiddler在抓取每个session时,都会调用CustomRules.js脚本文件,该脚本可以隐藏,标识或任意修改session的显示信息。
- Step1:Rules菜单 —> Customize Rules,打开“Fiddler ScriptEditor”
- step2: Ctrl+F查找“static function Main()”字符串,然后添加以下代码:
FiddlerObject.UI.lvSessions.AddBoundColumn(“ServerIP”, 120, “X-HostIP”);
2) 添加自定义列 在标题头上右键:
- Search this column:在当前列中搜索内容。
- Flag duplicates :标记重复项。
- Hide this column:隐藏此列。
- Ensure all columns are visible:确保所有列均可见。
- Customize columns:自定义列。
选择Customize columns:
3) 添加完成请求时间 Rules菜单 —> Custome Rules,搜索class Handlers。 加在class Handlers里面添加如下代码:
//左侧信息会显示时间
public static BindUIColumn("TimeTaken/ms", 120)
function TimeTaken(oS: Session):String{
var sResult = "0";
//获得时间戳的ms值
var t1_ms = oS.Timers.ClientBeginResponse.ToUniversalTime().Millisecond;
//获得时间戳的minute值
var t1_m = oS.Timers.ClientBeginResponse.ToUniversalTime().Minute;
//获得时间戳的second值
var t1_s = oS.Timers.ClientBeginResponse.ToUniversalTime().Second;
var t1 = t1_m*60*1000 + t1_s*1000 + t1_ms ;
var t2_ms = oS.Timers.ClientDoneRequest.ToUniversalTime().Millisecond;
var t2_m = oS.Timers.ClientDoneRequest.ToUniversalTime().Minute;
var t2_s = oS.Timers.ClientDoneRequest.ToUniversalTime().Second;
var t2 = t2_m*60*1000 + t2_s*1000 + t2_ms ;
if(t1 >= t2){
var t3 = t1 - t2;
sResult = t3.toString();
}
return sResult;
}
4)其他 点击标题头可以按属性值进行升序或者降序排序,默认是按ID排序。 选中标题头进行拖拽,自定义标题头的顺序。
3.4 辅助标签+工具栏
(1)Statistics: 统计分析,HTTP或HTTPS请求的性能和其他数据分析,如DNS解析时间,TCP/TP建立连接的时间(TCP三次握手的时间)、SSL连接的时间(针对https请求)等信息 (2) Inspectors: 检查器,以不同的形式展示请求或部分请求报文、响应或部分响应报文,操作:选中一条请求,点击Inspectors按钮,或直接双击某一条请求 1)请求信息:
- Headers :分类显示请求头信息,包含了 Web 客户端信息、Cookie、传输状态等。
- Textview:以文本形式显示请求体
- SyntaxView:以语法格式显示请求体
- WebForms:以网络表单的形式显示请求体
- HexView:以十六进制形式显示请求
- Auth:显示 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息.
- Cookies:显示Cookes
- Raw:将整个请求信息显示为纯文本(原生显示)
- JSON:以Json格式显示
- XML:以XML格式显示
2)响应信息: - Transformer:显示响应的编码信息
- Headers:分类显示响应头信息
- TextView :使用文本形式显示响应体
- SyntaxView:以语法格式显示响应体
- ImageVies:如果响应体是图片资源,显示响应的图片
- HexView:用十六进制数据显示响应
- WebView:响应在 Web 浏览器中的预览效果
- Auth:显示Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息。
- Caching :显示此请求的缓存信息
- Cookies:显示Cookes
- Privacy :显示此请求的私密 (P3P) 信息。
- JSON:以Json格式显示
- XML:以XML格式显示
(3)AutoResponder: 自动响应器,可用于拦截某一请求,进行如下操作:重定向到本地的资源、使用fiddler的内置响应、自定义响应。 使用场景: 1)生产环境出现一个问题, 直接修改生产环境的内容,肯定对正在使用的用户产生影响,这个时候可以使用自动响应器拦截这个请求,之后进行重定向到本地或者指定的响应去。
- step1:设置要拦截的请求:可以通过点击“add rule”按钮,添加将要拦截的URL,或直接在会话列表中选中请求并拖动到AutoResponder的面板中
- step2:指定响应:可以设置内置的响应,也可以选择本地作为一个响应
- step3:勾选Enable rules 以及 Unmatched results passthrough
- step4:重新该发起请求(需要清空缓存)
2)mock测试(开发人员接口还未开发好,测试人员可通过AutoResponder来模拟请求)
(4)Composer: 一个简单的接口测试工具(发包工具<发HTTP的数据包,发请求报文>、回放工具) 操作:鼠标左键拖动请求的url至右侧Composer面板处,请求信息会自动填充,修改请求参数,点击Execute
(5)Filters:过滤器,忽略不想显示的请求,过滤出想要的请求,是一个多维度的过滤器。过滤器要起作用,必须选中Use Filters
3.5 命令行/状态栏
4 Fiddler常用操作
4.1 断点
(1)设置全局断点: Rules->Automatic Breakpoints 或者直接在命令行状态栏中设置,可设请求前断点和响应后断点。 应用场景: 进行极端测试:应用响应后断点,篡改响应体数据,清空响应体进行极端测试(比如测试一个列表,可能是没有数据的,可通过这种方式清空数据,来查看没有数据时是否有一个友好性的提示; 也可模拟网络中断)
(2)设置局部断点: 通过命令行, 设置请求前断点:bpu 设置请求后断点:bpafter
4.2 弱网测试
step1: Rules->Customize Rules,打开Fiddler ScriptEditor,通过快捷键“Ctrl+F”查找“simulateModem”,自己设置延迟
step2: Rules->Perfermance->Simulate Modem Speeds
4.3 HTTPS抓包
HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
(1)捕获Google和IE HTTPS流量(Google和IE读的都是系统的证书,Firefox自己管理自己的证书):
- step1: Tools->Options->HTTPS,勾选Decrypt HTTPS traffic(解密HTTPS的流量)选项
- step2: 设置后如果还是抓不到HTTPS的包,在Tools->Options->HTTPS点击Actions,选择Reset All Certificates重置所有证书,根据提示完成所有操作,可以通过Actions->Open Windows Certificate Manager打开Windows的证书管理器,选择"操作->查找证书”,搜索fiddler,查看“DOT_NOT_TRUST_FiddlerRoot”证书是否成功安装
- step3: 如果还是不行,再设置一下Action->Trust Root Certificate
(2)捕获Firefox HTTPS流量 除了上述捕获Google和IE HTTPS流量设置外,还需进行如下操作: - 打开Firefox设置->常规设置,找到 网络设置,点击“设置”,打开连接设置面板,设置使用“系统代理”,或者“手动配置代理”
另,如果是老版本的Firefox,还需要找到 证书->查看证书->导入证书(在fiddler工具的Tools->Options->HTTPS->Actions->Export Root Certificate to Desktop下载证书)
4.4 APP抓包
-
step1: 点击Tools->Options->Conections,勾选Allow remote computers to connect,重启Fiddler,确保防火墙允许Fiddler进程可以远程连接(可关闭防火墙) -
step2: 移动设备连接WI-FI(需和Fiddler在同一网段),然后对所连接的Wi-Fi设置代理,代理主机名为fiddler所在 主机的IP,代理端口设置为Fiddler监听的端口 -
step3: 打开手机浏览器,访问http://FiddlerMachineIP:8888,该地址会返回Fiddler Echo Service页面,点击页面底部的FiddlerRoot Certificate下载证书 -
step4: 打开手机设置->找到关于系统安全的设置->加密与凭据->安装证书,安装刚下载的FiddlerRoot Certificate.cer -
step5: *测试完毕关闭代理,否则手机无法上网
4.5 Fiddler插件
安装fiddler插件:https://www.telerik.com/fiddler/add-ons willow插件:http://qzonetouch.github.io/commonWidget/willow,学习可访问:https://www.cnblogs.com/hally/p/12637081.html
|