Fiddler抓包工具
前言
学习 Spring 实在有些厌烦了,感觉学来学去都是那些东西,基于上次写的刷票脚本想找一个新的方向进行拓展一下,开阔自己的眼界,借此国庆长假不妨尝试一些抓包、爬虫之类的东西 ~
概述
Fiddler 是位于客户端和服务端的 HTTP 代理,所以可以实现 HTTP 抓包,主要作用就是监控浏览器所有的 HTTP、HTTPS 流量,而之前踩的坑,开了全局代理脚本依然是真实 ip 的主要原因是因为这些浏览器会默认先读取系统代理,如果没有有系统代理才会走真实 ip
所以自己写的脚本应该手动挂代理才行
可以在 控制面板 --> Internal选项 --> 连接 --> 局域网设置 --> 高级
里面配置代理(不过默认设置 Fiddler 会在启动时自动打开代理)
常用操作
快捷键
删除除选中请求之外的请求:shift + delete
删除全部请求:ctrl + x
自动解码
工具栏的 Decode
编码工具
工具栏的 TextWizard 例如简单的文本转成 Base64
断点
1、全局断点:左下角 请求前断点:在发送到服务器之前
2、筛选断点:使用过滤器 这个断点可以拦截别人的请求,然后发送自定义的数据
3、命令断点:使用 bpu
或 bpafter
命令
例如:
# bpu 收到请求后中断响应
bpu 匹配的关键字
# bpafter 请求前的断点
bpafter 匹配的关键字
添加属性
参考文档 Add Columns to the Web Sessions List
例如:添加 ip 字段
菜单,Rules -> Customize Rules
,打开“Fiddler ScriptEditor”
Ctrl+F查找 static function Main()
字符串,然后添加以下代码:
FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");
或者直接在属性标题右键就能弹出一个小菜单,选择自定义属性就行了
自动响应器
AutoResponder
就是把请求自动重定向到本地,返回一个本地的响应给这个请求
先添加一个规则(可以直接把请求列表的请求拖过来),可以在第二个框指定一个响应(或者响应一个指定的本地文件)
然后勾上下面的两项(第二个是放行没有匹配的请求)
由此可见,如果连接公共场合的 WiFi 就可能给拦截重定向到他的本地 js,从而篡改数据
除了上面这些违法的请求,也可以做 mock 测试,就是没有做完的 api 可以重定向到本地获取假数据
发送请求
Composer
可以直接把请求列表的请求拖到这里,也可以手写
虽然这个 Fiddler 是用来抓包的,但是也能用于发送请求测试 相对 Postman 更加纯粹,直接编写请求头
弱网测试
按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。
就是对这种连接不强的(或者网速不好的)网络进行测试
设置网络限速
但是如果要改限速具体大小需要修改脚本(有点傻~)
在脚本处搜索 m_SimulateModem
在这里修改时间就行了
过滤器
这个没事好说,直接看页面就知道其功能
这里有个特色功能就是给匹配上的请求都加上某个请求头字段
下面的 set request header
过滤到指定的请求进行断点:
HTTPS 抓包原理
就是中间人攻击
不同于简单的 Http 代理,HTTPS 服务需要权威 CA 机构颁发的 SSL 证书才算有效。自签证书浏览器不认,而且会给予严重的警告提示。而遇到 “此网站安全证书存在问题” 的警告时,大多用户不明白是什么情况,就点了继续,导致允许了黑客的伪证书,HTTPS 流量因此遭到劫持。
参考资料 Fiddler抓取https原理? - [已重置]的回答 - 知乎
首先 fiddler 截获客户端浏览器发送给服务器的 https 请求, 此时还未建立握手。
第一步, fiddler 向服务器发送请求进行握手, 获取到服务器的 CA 证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器 CA 证书公钥。
第二步, fiddler 伪造自己的 CA 证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟 fiddler 一样的事。
第三步, 客户端浏览器生成 https 通信用的对称密钥, 用 fiddler 伪造的证书公钥加密后传递给服务器, 被 fiddler 截获。
第四步, fiddler 将截获的密文用自己伪造证书的私钥解开, 获得 https 通信用的对称密钥。
第五步, fiddler 将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。
第六步, fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。
第七步, 客户端向服务器发送消息, 用对称密钥加密, 被 fiddler 截获后, 解密获得明文。由于 fiddler 一直拥有通信用对称密钥, 所以在整个 https 通信过程中信息对其透明。
命令
左下角的黑窗口 官方文档
查找对应响应码的数据包或请求类型的数据包
=post 或者=200
查找服务器返回是图片类型的请求
select image
匹配指定字符的请求包
? str
对带有某个字段的请求包字体加粗
Bold xxx
常用命令如下
命令 | 对应请求项 | 介绍 | 示例 |
---|---|---|---|
? | All | 问号后边跟一个字符串,可以匹配出包含这个字符串的请求 | |
> | Body | 大于号后面跟一个数字,可以匹配出请求大小,大于这个数字请求 | >1000 |
< | Body | 小于号跟大于号相反,匹配出请求大小,小于这个数字的请求 | <100 |
= | Result | 等于号后面跟数字,可以匹配HTTP返回码 | =200 |
@ | Host | @后面跟Host,可以匹配域名 | @www.baidu.com |
select | Content-Type | select后面跟响应类型,可以匹配到相关的类型 | select image |
cls | All | 清空当前所有请求 | cls |
dump | All | 将所有请求打包成saz压缩包,保存到“我的文档\Fiddler2\Captures”目录下 | dump |
start | All | 开始监听请求 | start |
stop | All | 停止监听请求 | stop |
断点命令 | |||
bpafter | All | bpafter后边跟一个字符串,表示中断所有包含该字符串的请求 | bpafter baidu(输入bpafter解除断点) |
bpu | All | 跟bpafter差不多,只不过这个是收到请求了,中断响应 | bpu baidu(输入bpu解除断点) |
bps | Result | 后面跟状态吗,表示中断所有是这个状态码的请求 | bps 200(输入bps解除断点) |
bpv / bpm | HTTP方法 | 只中断HTTP方法的命令,HTTP方法如POST、GET | bpv get(输入bpv解除断点) |
g / go | All | 放行所有中断下来的请求 | g |