!!!
一、Fiddler原理与下载
Fiddler可以理解为处于客户端和服务器之间的
代理服务器
。通过在各浏览器、Andoird、IOS设备上设置Fiddler的代理,从而可以监听客户端上发生的HTTP(S)请求
。
这篇博客是在B站上看完一个详细教程后编写的,想看视频的可以直接点击链接去看:链接_Fiddler教程
- 下载链接:可以直接官网上下载,也可以点击下面链接下载 百度云链接,提取码:g7nz
二、Fiddler设置代理
2.1 谷歌、IE浏览器
由于
谷歌
浏览器和IE
浏览器启动的时候,就会默认读取系统代理
,所以只需要将Fiddler设置为启动后作为系统代理
即可。
- 设置启动即作为系统代理——点击
Tools
->Options
->Connections
这样设置后,我们在谷歌浏览器和IE浏览器访问HTTP请求,就会在Fiddler工具左侧中显示出请求,但是HTTPS的请求却没有显示出来,这是为什么呢?
原因如下:Fiddler作为一个代理服务器,是可以代理到HTTPS请求的
。但是HTTPS可以理解为HTTPS=HTTP+SSL/TLS
,也就是HTTPS是加密
的,是有证书
存在的。所以我们需要配置解密HTTPS并安装证书
。
-
配置解密HTTPS并安装证书——点击
Tools
->Options
->HTTPS
。
-
查看证书是否安装成功。
-
最后效果——浏览器中访问HTTPS的页面,也能在Fiddler中显示。
2.2 火狐浏览器
谷歌和IE浏览器是直接使用系统代理,且使用系统的证书。但是火狐浏览器默认不是使用系统代理,且使用的不是系统的证书,是自己管理自己的证书。
所以对于火狐浏览器,需要先设置为使用系统代理
,再在火狐浏览器中导入Fiddler的证书
。
- 火狐浏览器设置使用系统代理
- Fiddler导出证书
- 火狐浏览器导入证书
- 最后效果——浏览器中访问HTTPS的页面,也能在Fiddler中显示。
2.3 Android客户端
首先,使用Fiddler对Android客户端抓包的时候,需要
手机连接的WIFI
和Fiddler电脑本机
使用的同一个网络
,这样才能做数据通信。
- Fiddler设置——允许远程主机连接
- 手机WLAN设置代理
- 下载证书
- 安装证书
- 提示:按照上面的配置后,按照正常情况下,就能抓到HTTPS的包了。但是由于
Android7
之后,系统只信任系统预置的CA证书
,不会信任用户安装的CA证书
。具体参考:这是一个链接
2.4 IOS客户端
由于穷,没有演示IOS客户端的办法,请直接查看视频:IOS抓包
三、Fiddler界面及功能
可以将Fiddler从界面上划分,分为五个部分:
菜单栏
、工具条
、监控面板(回话列表)
、辅助标签(工具)
、命令行+状态栏
。
3.1 菜单栏
3.1.1 Rules-规则
3.1.2 Tools—工具
3.2 工具条
3.2.1 Comments—备注
3.2.2 Replay—重放
3.2.3 Remove—移除
移除所有 Remove ALL的快捷键为
Ctrl+X
3.2.4 Go—转到下一步(结束断点)
3.2.5 Stream—流模式
3.2.6 Decode—解码
3.2.7 Keep Sessions—保持回话
3.2.8 Pick target—选择捕获对象
3.2.9 Find查找—Save保存
3.2.10 浏览器快捷方式
3.2.11 TextWizard—文本编码解码器
3.3 监控面板(回话列表)
3.3.1 字段含义
3.3.2 添加IP列
参考链接:Fiddler显示服务器ip地址列
- 点击菜单栏
rules
——customize rules...
- ctrl+f 搜索
static function main
- 在main函数里加入下面一行代码,调用
fiddlerUI函数
,显示ip地址列FiddlerObject.UI.lvSessions.AddBoundColumn("IP地址",120,"X-HostIP");
- 保存后关闭,重启Fiddler即可
3.3.3 添加响应时间列
-
点击菜单栏
rules
——customize rules...
-
找到class Handlers,并在其中添加下面代码
function BeginRequestTime(oS: Session) { if (oS.Timers != null) { return oS.Timers.ClientBeginRequest.ToString(); } return String.Empty; }
public static BindUIColumn("响应时间")
function CalcTimingCol(oS: Session){
var sResult = String.Empty;
if ((oS.Timers.ServerDoneResponse > oS.Timers.ClientDoneRequest))
{
sResult = (oS.Timers.ServerDoneResponse - oS.Timers.ClientDoneRequest).ToString();
}
return sResult;
}
-
保存后退出,重启后即可。
3.4 辅助标签(工具)
3.4.1 Statistics—统计数据
- 代表详细的数据,具体参考:这是一个链接
3.4.2 Inspector—检查器
- 可以理解为
请求
、响应
的详细信息
。
3.4.3 AutoResponder—自动响应器(重要)
含义:可以用于拦截某一个请求,进行如下操作:(1)
重定向到本地资源
(2)使用Fiddler内置响应
(3)自定义响应
- 实例一:将网站中的图片请求设置内置响应403。原本的图片如下:
在自动响应器中添加规则,请求匹配中填写图片链接,响应这里选择内置的403即可。
再次请求页面,图片加载失败。
- 除了使用内置响应,也可以使用本地文件。
- 还可以通过点击
Edit Response
来自定义响应。
在实际工作中,我们可以使用自动响应器来做以下工作:
(1)Web调试
:在相关接口未开发完事,使用作为调试
(2)Mock测试
:自定义响应,从而不影响实际的数据,例如有时在生产环境中不能产生脏数据。
(3)极端测试
:例如自定义某个请求的响应为空
,去查看前端界面的展示
。
3.4.3 Composer—设计器(重要)
功能为设计请求,即为
模拟请求
发送。可以认为一个简单的接口测试工具,例如Postman功能。
- 自定义请求并发送
- 修改请求并发送—类似于接口测试。在Fiddler捕获到请求后,将要进行测试的接口拖动到Composer中,修改参数,点击发送就达到接口测试的效果了。
3.4.4 Filter—过滤器
- 用于
对请求过滤
,具体自己实际试一下即可。
3.5 命令行+状态栏
3.5.1 QuickExec—命令行
- 官方给出的命令教程:这个是一个教程
3.5.2 请求前断点 & 响应后断点
- 请求前断点:请求从客户端发出,但是未发送到服务器
- 响应后断点:响应从服务器发出,但是未到达客户端
3.5.3 捕获
3.6 其他内容
3.6.1 断点应用
断点可以分为
全局断点
和局部断点
。全局断点又可以分为请求前断点
和响应后断点
。之前点击命令行下的位置就是全局断点。
-
全局断点—
请求前断点
:可以在请求到达服务器之前,进行数据篡改
。
-
全局断点—
响应后断点
。与请求前断点道理一样,可以修改响应结果,然后返回响应。这里还可以使用响应后断点模拟网络中断
,打了断点之后,客户端迟迟收不到服务器的响应,就类似网络中断了,然后由于客户端的超时机制
,查看显示是否友好。 -
局部断点
—通过命令完成局部断点请求前断点:bpu 匹配内容 响应后断点:bpafter 匹配内容
3.6.2 弱网测试
弱网测试:就是模拟网络限速的情况下,请求及响应的情况。参考链接:弱网测试
- 启动
网络限速
,打开Fiddler,Rules->Performance->勾选Simulate Modem Speeds
- 具体设置:Rules—>
Cutomize Rules
打开CustomRules.js 文档
- 搜索
m_SimulateModem
。
四、写在最后
Fiddler:从抓包到入狱,。抓包抓的好,牢饭吃的饱。请谨慎使用。
!!!
版权声明:本文为CSDN博主「One Tester」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37688023/article/details/106609936