fiddler工具使用详细总结
Fiddler简介
Fiddler是位于客户端和服务器端的HTTP代理
目前最常用的http抓包工具之一
功能非常强大,是web调试的利器
- 监控浏览器所有的HTTP/HTTPS流量
- 查看、分析请求内容细节
- 伪造客户端请求和服务器响应
- 测试网站的性能解密HTTPS的web会话
- 全局、局部断点功能
- 第三方插件
场景使用场景
- 接口调试、接口测试、线上环境调试、web性能分析
- 判断前后端bug、开发环境hosts配置、mock、弱网断网测试
B/S架构
编写程序部署到web服务器
web服务器运行在服务器上,绑定ip地址并监听某端口,接收和处理http请求
客户端通过http协议获取服务器上的网页、文档等
工作原理
HTTP
Hyper Text Transfer Protocol(超文本传输协议)
用于从万维网服务器传输超文本到本地浏览器的传送协议
HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80
http是基于请求与响应模式的、无状态的、应用层的协议
完整的HTTP协议
完整的http协议包含请求和响应两块内容
HTTP请求报文
HTTP请求报文主要由请求行、请求头部、空一行、请求正文(请求体)4部分组成
如下是fiddler某个会话的请求报文
请求方法( Request Method)
请求方法 | 备注 |
---|---|
GET | 请求资源 |
POST | 提交资源 |
Head | 获取响应头 |
PUT | 替换资源 |
DELETE | 删除资源 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
URL
Uniform Resource Locator:统一资源定位符,用于描述网上的资源
格式:schema://host[:port#]/path/.../[?query-string]
scheme:协议,如http,https,ftp等
host:域名或者IP地址
port:端口
path:资源路径
query-string:发送的参数
如:https://www.baidu.com/s?wd=柠檬班
请求头(Request Header)
请求头 | 描述 |
---|---|
Host | 主机ip地址或域名 |
User-Agent | 客户端相关信息,如果操作系统、浏览器等信息 |
Accept | 指定客户端接收信息类型,如:image/jpg,text/html,application/json |
Accept-Charset | 客户端接受的字符集,如gb2312、iso-8859-1 |
Accept-Encoding | 可接受的内容编码,如gzip |
Accept-Language | 接受的语言,如Accept-Language:zh-cn |
Authorization | 客户端提供给服务端,进行权限认证的信息 |
Cookie | 携带的cookie信息 |
Referer | 当前文档的URL,即从哪个链接过来的 |
Content-Type | 请求体内容类型,如Content-Type: application/x-www-form-urlencoded |
Content-Length | 数据长度 |
Cache-Control | 缓存机制,如Cache-Control:no-cache |
Pragma | 防止页面被缓存,和Cache-Control:no-cache作用一样 |
HTTP响应报文
HTTP响应报文主要由状态行、消息报头、空一行、响应正文4部分组成
如下是fiddler某个会话的响应报文
状态码(Status Code)
用以表示网页服务器HTTP响应状态的3位数字代码
状态码 | 描述 |
---|---|
1XX | 提示信息,请求被成功接收 |
2XX | 成功,请求被成功处理 200 |
3XX | 重定向相关 304 |
4XX | 客户端错误 404 |
5XX | 服务器端错误 500 |
响应头(Response Header)
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 设置Cookie |
Last-Modified | 资源最后修改时间 |
Content-Type | 响应的类型和字符集,如:Content-Type: text/html; charset=utf-8 |
Content-Length | 内容长度 |
Connection | 如Keep-Alive,表示保持tcp连接不关闭,不会永久保持连接,服务器可设置 |
Location | 指明重定向的位置,新的URL地址,如304的情况 |
GET请求
格式http://host:port/path?xx=aa&yy=bb
如:http://120.78.128.25/futureloan/mvc/api/member/register?mobilephone=13555555528&pwd=123456
说明:
- http/https:协议类型
- host:服务器主机ip地址或域名
- port:端口号,如果是80可以省略,其它端口必须指明
- path:访问资源的路径
- ?:分隔符,用于区别path和参数
- xx=aa、yy=bb:请求参数列表
- &:多个参数的连接符号
Fiddler概览
界面详解
Session List(会话列表)
Fiddler抓取到的每条http请求(每一条称为一个session)
主要包含了请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息
Statistics(统计)
HTTP请求的性能和其他数据分析,如DNS解析的时间,建立TCP/IP连接的时间消耗等信息
Inspectors(检查器)
Inspectors意思是检查器
可以多种方式查看请求的请求报文和响应报文相关信息
AutoResponder(自动响应器)
AutoResponder可用于拦截某一请求,进行如下操作:
重定向到本地的资源
使用Fiddler的内置响应
自定义响应
Filters(过滤器)
多维度的过滤规则,可根据主机、进程、请求头、响应头、状态码、响应类型和大小、断点进行请求的过滤
HTTPS抓包
- 点击Tools > Fiddler Options > HTTPS
- 勾选Decrypt HTTPS Traffic
捕获Firefox HTTPS的包
导出Fiddler根证书
- Tools > Fiddler Options > HTTPS
- Actions > Export Root Certificate toDesktop将Fiddler根证书导出到桌面
捕获Firefox HTTPS的包
Firefox导入根证书
- 打开Firefox浏览器
- 击打开菜单 > 选项 > 高级 > 证书 > 查看证书
- 点击导入 > 选择桌面的Fiddler根证书 > 打开
抓不到HTTPS解决方案1
- 关闭Fiddler和Firefox
- 运行命令certmgr.msc,打开系统的证书管理器(Fiddler的https配置选项卡中的Actions也可打开)
- 点击操作 > 查找证书 > 输入Fiddler进行查找 > 选中所有查找到的证书 > 删除
- 重复步骤配置Firefox浏览器抓取HTTPS包
- 重新测试,大部分情况可以抓取HTTPS包了
抓不到HTTPS解决方案2
清除系统安装的Fiddler根证书
- 运行命令certmgr.msc,打开系统证书管理
- 点击操作 > 查找证书 > 输入"Fiddler"进行查找 > 选中所有查找到的证书 > 删除
清除Firefox中Fiddler根证书
- 打开Firefox浏览器
- 点击打开菜单 > 选项 > 高级 > 证书 > 查看证书
- 找到并各项中的DO_NOT_TRUST_FiddlerRoot证书
下载并安装Fiddler证书生成器
- 下载FiddlerCertMaker.exe ,地址https://www.telerik.com/fiddler/add-ons ,搜索:CertMaker
- 直接打开FiddlerCertMaker.exe (安装过程中如出现错误可忽略)
重启fiddler和Firefox浏览器
- 重新导出导出证书步骤
抓iOS设备APP包-Fiddler设置
- 点击 Tools > Fiddler Options > Connections.
- 勾选Allow remote computers to connect.
- 重启Fiddler
- 确保防火墙允许 Fiddler进程可以远程连接
- iOS设备连接WiFi
- 确保iOS设备可以访问到http://FiddlerMachineIP:8888 ,该地址会返回Fiddler Echo Service 页面
iOS设备抓包-iOS设备设置
- 点击设置 > Wi-Fi > 打开连接的Wi-Fi设置
- 点击配置代理 > 手动
- 设置iOS代理服务器地址为Fiddler所在主机的IP地址
- 设置端口为Fiddler监听的端口
- 点击存储 保存代理设置
- 打开一个非HTTPS的网站,此时Fiddler已经可以捕获HTTP请求了
iOS设备抓包-安装证书解密HTTPS
- 在iOS设备打开浏览器,访问 http://ipv4:8888/
- 点击Fiddler Echo Service页面底部FiddlerRoot certificate下载证书
- 打开FiddlerRoot.cer 文件并安装
- 安装成功后,在通用 > 关于本机 > 证书信任设置中,信任刚安装的Fiddler证书
- Safari打开https://www.baidu.com,已经可以抓取HTTPS包了
Android设备抓包
- 以小米9为例,打开设置 > WLAN > 连接上的WLAN设置
- 点击代理 > 手动,设置主机名为Fiddler所在主机的IP,端口为Fiddler监听端口
- 打开Android设备浏览器,访问 http://ipv4:8888/
- 点击页面底部FiddlerRoot certificate下载证书
- 打开设置 > 更多设置 > 系统安全 > 加密与凭据 > 从存储设备安装
- 选择下载好的FiddlerRoot.cer进行安装
- 浏览器打开https://www.baidu.com,已经可以抓取HTTPS包了
注意:测试完毕,记得关闭代理,否则手机无法上网