这里写目录标题
一、Fiddler安装及原理
1、Fiddler安装
Fiddler官方网站:https://www.telerik.com/download/fiddler
(1)、选择怎么用Fiddler、你的邮箱、那个国家,勾选协议,点击Download for Windows按钮开始下载
(2)、下载成功后,找到FiddlerSetup.exe可执行程序,并双击
(3)、点击I Agree按钮
(4)、选择安装路径,点击Install按钮
(5)、安装完成后,点击Close按钮
(6)、在安装目录下,找到Fiddler.exe,双击即可打开Fiddler
2、Fiddler抓包原理
Fiddler是在客户端和服务端之间建立的HTTP代理服务器,能够监听客户端发出的请求和服务端返回的响应结果
差一张图
图解:
-
在客户端和服务器之间,建立一个HTTP代理服务器
-
当启动的时候,Fiddler会默认把自己设置为系统代理,来监听客户端的HTTP/HTTPS请求
-
默认代理地址为:127.0.0.1默认端口为:8888
-
浏览器访问WEB网站的时候,请求报文会先发送到Fiddler
-
Fiddler再把请求报文转发给服务器
-
Web服务器返回的响应报文,会先达到Fiddler
-
Fiddler再把响应报文返回给浏览器
系统代理
Fiddler启动后,会把自己设置为系统代理(以win 7为例)
启动Fiddler后,打开控制面板–>网络和Internet–>Internet选项–>连接–>局域网设置,可以看到<代理服务器>是勾选的转态,点击<高级>按钮可以看见Fiddler的代理地址127.0.0.1和默认端口8888
我们还可以看下Fiddler的操作页面。依次点击Fiddler菜单栏Tools–>Options–>Connections,可以看到Fiddler的默认端口是8888
3、Https协议导入证书
默认情况下,Fiddler只能抓取http协议的包,想要抓取https的包就需要安装证书
(1)、点击Tools–>Options–>HTTPS
(2)、勾选全部选项
(3)、点击Actions–>Reset All Certificates重置全部证书
注:一直点<确定><是><Yes>按钮即可
(4)、点击Actions–>Trust Root Certificates–>Yes信任证书
(5)、点击Actions–>Export Root Certificates to Desktop导出证书到桌面
(6)、桌面选择证书右键–>安装证书–>下一步–>下一步–>完成,弹出导入成功代表证书安装成功
(7)、选择浏览器,点击设置–>高级–>系统–>内容–>证书–>导入,选择桌面的证书,一直点下一步,弹出导入成功代表浏览器证书安装成功
二、Fiddler菜单栏和工具栏
1、菜单栏的含义
File菜单
(1)、Capture Traffic:可以控制是否把Fiddler注册为系统代理
(2)、New Viewer:打开一个新的Fiddler窗口
(3)、Load Archive:用于重新加载之前捕获的以SAZ文件格式保存的数据包
(4)、Save:支持以多种方式把数据包保存到文件中
(5)、Import Sessions…:支持导入从其他工具捕获的数据包,也支持导入以其他格式存储的数据包
(6)、Export Sessions…:把Fiddler捕捉到的会话以多种文件格式保存
(7)、Exit:取消把Fiddler注册为系统代理,并关闭Fiddler
Edit菜单
(1)、Copy:复制会话
(2)、Remove:删除会话
(3)、Select All:选择所有会话
(4)、Undelete:撤销删除会话
(5)、Paste as Session:把剪切板上的内容粘贴成一个或多个模拟的会话
(6)、Mark:选择一种颜色标记选中会话
(7)、Unlock for Editing:解锁会话
(8)、Find Session…:打开Find Session窗口,搜索捕获到的数据包
Rules菜单
(1)、Hide Image Request:隐藏图片会话
(2)、Hide CONNECTS:隐藏连接通道会话(Tunnel to)
(3)、Automatic Breakpoints:自动在[请求前]或[响应后]设置断点。Ignore Image触发器控制这些断点是否作用于图片请求
(4)、Customize Rules…:打开Fiddler脚本编辑窗口
(5)、Require Proxy Authentication:要求客户端安装证书。该规则可以用于测试HTTP客户端,确保所有未提交Proxy-Authorization请求头的请求会返回HTTP/407响应码
(6)、Apply GZIP Encoding:只要请求包含具有GZIP标识的Accept-Encoding请求头,就会对所有响应使用GZIP HTTP进行压缩(图片请求除外)
(7)、Remove All Encoding:删除所有请求和响应的HTTP内容编码和传输编码
(8)、Hide 304s:隐藏响应为HTTP/304 Not Modified状态的所有会话
(9)、Request Japanese Content:选项会把所有请求的Accept-Encoding请求头设置或替换为ja标识,表示客户端希望响应以日语形式发送
(10)、User-Agents:把所有请求的User-Agent请求头设置或替换成指定值
(11)、Performance:模拟弱网测试速度
Tools菜单
(1)、Options…:打开Fiddler选项窗口
(2)、WinINET Options…:打开IE的Internet属性窗口
(3)、Clear WinINET Cache:清空IE和其他应用中所有使用的WinINET缓存中的所有文件
(4)、Clear WinINET Cookies:清空IE和其他应用中所发送的WinINET Cookie
(5)、TextWizard…:选项会启动TextWizard窗口,对文本进行编码和解码
(6)、Compare Session:比较会话
(7)、Reset Script:重置Fiddler脚本
(8)、Sandbox:打开http://webdbg.com/sandbox/
(9)、View IE Cache:打开IE缓存窗口
View菜单
(1)、Show Toolbar:控制Fiddler工具栏是否可见
(2)、Default Layout、Stacked Layout、Wide Layout:三种界面布局
(3)、Minimize to Tray:最小化Fiddler到系统托盘(快捷键:)
(4)、Squish Session List:控制会话列表是否水平收缩
(5)、AutoScroll Session List:添加新的会话时,自动滚动到会话列表底部
2、工具栏的用法
(1)、备注功能
(2)、Replay:重新发送请求,快捷键R键
(3)、删除请求
(4)、Go:当有请求前断点时,点击去发送请求
(5)、Stream:流模式(默认是缓冲模式)
(6)、Decode:解码
(7)、Keep: All sessions:保持会话的数量
(8)、Any Process:选择你想要抓包或者监听的程序
(9)、Find:查找
(10)、Save:保存所有会话,文件名以.saz为扩展名
(11)、截图
(12)、计时器s
(13)、Browse:快捷的打开IE浏览器
(14)、Clear Cache:清除缓冲
会话面板介绍
项目 | Value |
---|---|
请求正发生到服务器 | |
响应正从服务器读取 | |
请求在断点处暂停 | |
响应在断点处暂停 | |
请求使用http head方法;响应应该没有body | |
请求使用http post方法 | |
请求使用http connect方法;这建立了一个用于https流量的隧道 | |
响应是html | |
响应是一张图片 | |
响应是一个脚本 | |
响应是叠加样式表 | |
响应是xml | |
响应是json | |
响应是一个音频文件 | |
响应是一个视频文件 | |
响应是一个silverlight小程序 | |
响应是一个flash小程序 | |
响应是一个字体 | |
通用的成功的响应 | |
响应是http/300、301、302、303或者307重定向 | |
响应是http/304:使用缓冲版本 | |
响应是对客户端凭据的请求 | |
响应是一个服务器错误 | |
会话被客户端、fiddler或服务器终止 | |
响应的Content-Type值为:text/html |
三、Fiddler过滤与Inspector
1、Fiddler过滤规则
可通过设置Filters过滤规则,实现在会话中仅展示过滤后的请求。比如可以在会话列表中仅展示某个特定网站的HTTP请求,也可以通过过滤响应码设置仅显示过滤后的响应码。具体的过滤规则根据实际的使用场景进行配置。以下为过滤规则说明:
过滤规则 | 说明 |
---|---|
Hosts | 对主机进行过滤,仅展示内网、仅展示外网、仅展示特定网址等 |
Client Process | 对客户端进程进行过滤,仅展示特定进程流量等 |
Request Headers | 对请求头进行过滤,仅展示特定URL来源、标记请求头包含特定内容等 |
Breakpoints | 对断点进行过滤,对特定请求方法、请求内容进行断点等 |
Response Status Code | 对响应状态码进行过滤,仅展示过滤后的响应状态码 |
Response Type and Size | 对响应内容类型及大小进行过滤,仅展示特定响应内容类型及大小、阻塞响应内容特定类型文件等 |
Response Headers | 对响应头进行过滤,标记响应头包含特定内容、cookies、伪造响应头等 |
Hosts
Client Process过滤
(1)、Show only traffic from:可以指定只捕捉哪个Windows进程中的请求
(2)、Show only Internet Explorer traffic:只显示IE发出的请求
(3)、Hide Windows RSS platform traffic:隐藏Windows RSS平台发出的请求
Request Headers过滤
(1)、Show only if URL contains:显示包含某字符过滤
(2)、Hide if URL contains:隐藏包含某字符过滤
REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)(\?.*)?$
(3)、Flag requests with heads:标记带有特定header的请求
(4)、Delete request headers:删除请求header
(5)、Set request headers:替换某字符
Breakpoints
(1)、Break request on HTTP POST:给所有POST请求设置断点
(2)、Break request on HTTP GET with query string:给所有带参数的GET请求设置断点
(3)、Break response on Content-Type:给特定的Content-Type设置断点
Response Status Code过滤
(1)、Hide success(202,204,206):隐藏响应成功的session(202,204,206)
(2)、Hide Authentication demands(401):隐藏未经授权被拒绝的session(401)
(3)、Hide redirects(300,301,302,303,307):隐藏重定向的session(300,301,302,303,307)
(4)、Hide Not Modified(304):隐藏无变更的session(304)
Response Headers
(1)、Flag response that set cookies:标记会设置cookie的响应
(2)、Flag response with headers:标记带有特定header的响应
(3)、Delete response headers:删除响应header
(4)、Set response header:设置响应的header
注:隐藏Host为Tunnel to的会话,Rules—>Hide CONNECTs,把前面的勾勾起来。HTTPS解密失败的会话不会显示
注:隐藏图片类会话Rules—>Hide Image Requests,把前面的勾勾起来。图片类会话不会显示
2、Inspectors用法
(1)、Inspectors:主要是查看请求报文、响应报文,是Fiddler最主要的功能
(2)、Inspectors:界面上半部分为请求报文和下半部分分为响应报文
请求头
Request Headers:可以分层级分类显示请求头的信息,包含请求的Cache、Client、Cookies、Entity、Miscellaneous、Security、Transport等相关信息,但并不是所有请求都包含以上全部信息
请求消息体
Inspectors:根据请求的不同,可以选择多种格式化的形式展示请求报文的部分或全部信息,但是一个请求不可能有所有的展示形式
展示格式 | 说明 |
---|---|
TextView | 以文本格式展示 |
SyntaxView | 以语法格式展示 |
WebForms | 以表单格式展示 |
HexView | 以16进制格式展示 |
Auth | 仅展示鉴权信息 |
Cookies | 仅展示Cookies信息 |
Raw | 以元生格式展示 |
JSON | 以JSON格式展示 |
XML | 以XML格式展示 |
比较常用的展示格式有Cookies、RAW、JSON、WebForms等,RAW可以看到完整的请求信息,包含请求的方法、地址、路由、参数、协议版本、请求头信息。所以RAW最常用
Response响应报文
响应头
Response Headers:可以分层次级分类显示响应头的信息,包含协议版本、响应Code、Cache、Cookies/Login、Entity、Miscellaneous、Security、Transport等相关信息,但并不是所有响应都包含以上全部信息
响应消息体
(1)、Inspectors根据响应的不同,可以选择多种格式化的形式展示请求报文的部分或全部信息,但是一个响应不可能有所有的展示形式
(2)、比较常用的展示格式有Cookies、RAW、JSON、XML等,RAW可以看到完整的请求信息,包含协议版本、响应Code、响应头信息、响应结果
展示格式 | 说明 |
---|---|
TextView | 以文本格式展示 |
SyntaxView | 以语法格式展示 |
ImageView | 以图片格式展示 |
HexView | 以16进制格式展示 |
WebForms | 以表单格式展示 |
Auth | 仅展示鉴权信息 |
Caching | 仅展示Caching缓冲信息 |
Cookies | 仅展示Cookies信息 |
Raw | 以元生格式展示 |
JSON | 以JSON格式展示 |
XML | 以XML格式展示 |
四、Fiddler断点、重定向、发送请求
1、Fiddler断点
Fiddler可以通过设置断点修改请求,拦截响应数据,篡改响应。Fiddler有两种设置断点的方式:全局断点和局部断点。设置全局断点后,所有的HTTP/HTTPS请求都会被拦截;而设置局部断点后,仅针对设置断点的请求进行拦截。常用的是局部断点
全局断点
(1)、全局断点,所有的HTTP/HTTPS请求都会被拦截。设置全局断点的方式有2种,一种是通过点击菜单栏设置。另一种是通过快捷键设置
断点图标 | 断点说明 | 设置方式 | 快捷方式 |
---|---|---|---|
请求前断点 | Before Requests | F11 | |
响应后断点 | After Responses | Alt+F11 | |
取消所有断点 | Disabled | Shift+F11 |
(2)、设置方式:Rules—>Automatic Breakpoints—>Before Requests/After Responses
(3)、从全局断点和局部断点的区别可以看出,全局断点的应用和局部断点的应用场景是一样的
局部断点
局部断点,是针对某条特定的请求设置断点进行调试。在命令行中输入需要设置断点的请求指令,也是常用的一种断点调试方式。常用断点调试命令如下:
命令行 | 断点说明 |
---|---|
bpu 空格+接口地址,回车 | 请求前断点 |
bpafter 空格+接口地址,回车 | 响应后断点 |
bps 空格+响应状态码,回车 | HTTP响应状态码断点 |
bpm 空格+请求方式,回车 | 请求方式断点 |
bpu+回车 | 取消所有请求前断点 |
bpafter+回车 | 取消所有响应后断点 |
bps+回车 | 取消所有响应状态码断点 |
bpm+回车 | 取消所有请求方式断点 |
请求前断点
案例:通过设置请求前断点,来篡改请求参数。以博客园的用户注册为例
第一步:浏览器打开网页:https://account.cnblogs.com/signup
第二步:在Filters中,添加主机:*.cnblogs.com
第三步:在Fiddler命令窗口输入:bpu https://account.cnblogs.com/signup
第四步:在第一步打开的网页中,填写注册信息,滑动验证码,点击【注册】按钮
第五步:在Fiddler会话列表中,可以看到这个请求已经被设置了请求前断点
第六步:点击这个会话请求,再点击右侧的WebForms表单,可以看到刚才填写的注册信息
第七步:篡改刚才填写的邮件地址、手机号码
第八步:点击【Break on Rep】、【Run to Comp】2个按钮
第九步:观察响应报文
web前端填写的邮件地址、手机号码等信息,可以在Fiddler中可以进行篡改。如果后端接口没有对数据进行校验,那么我们填写的不合法邮件地址、手机号码将变得合法了。但是后端接口,如果不通过篡改数据来做测试,web前端根本没办法输入非法的邮箱和手机号
响应后断点
断点设置
第一步:在浏览器中打开网站:https://account.cnblogs.com/signup
第二步:在Fiddler命令窗口输入:bpafter https://account.cnblogs.com/signup
第三步:正常填写注册信息,点击注册按钮
第四步:修改返回中的响应信息
2、Fiddler重定向:AutoResponder
添加规则
AutoResponder实现自动重定向,首先就需要添加规则。添加规则的方式有三种:手动添加、一键导入、引用会话请求
手动添加
(1)、通过点击“Add Rule”按钮手动添加,在规则编辑器中编辑需要匹配的请求,和篡改后的响应,完成后点击“save”按钮
(2)、AutoResponder匹配规则有四种:字符串匹配、NOT匹配(不匹配)、EXACT匹配(精确匹配)、REGEX匹配(正则表达式匹配)
字符串匹配
模糊匹配,不区分大小写,匹配包含该字符串的请求,匹配包含baidu的请求,网络延迟1s
NOT 匹配
模糊匹配,不区分大小写,发送不匹配包含该字符串的请求。语法:NOT:str(注意空格)
EXACT匹配
精确匹配,区分大小写,匹配包含该字符串的请求。语法:EXACT:URL
REGEX匹配
使用正则表达式进行匹配,REGEX:正则表达式
模拟mock请求,本地新建一个txt或者json文件
然后设置规则里:
再去请求:http://127.0.0.1/test
3、发送请求:Composer
(1)、设计或者构造一个请求,主要模拟发送请求,Fiddler提供了2种方式构造请求,一种是Parsed方式,一种是Raw方式
(2)、Parsed方式:可以翻译成语法解析方式。以图形界面的方式选择或者输入请求方法、请求URL、请求头、请求消息体,来构造请求
(3)、Raw方式:可以翻译为原始报文方式。没有图形界面选择,自能以HTTP请求报文的格式构造请求
Parsed方法构造百度请求
在Parsed界面,选择请求方法为GET、填写请求路径:https://www.baidu.com/,点击执行按钮,即可发送请求
Raw方式构造百度请求
在Raw界面,输入请求行、请求头Host,点击执行按钮,即可发送请求