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请求报文主要由请求行,请求头部、空一行、请求正文4部分组成。
请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。
请求方法字段
请求方法 | 备注 |
---|---|
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:发送的参数
- 资源定位符http:// test. lemonban.com/ningmengban/images/logo.png
- 协议 http://
- 域名 test.lemonban. com 对应主机IP,为了查找主机 cmd命令行可以用ping域名的方式命令查找IP
请求头部
请求头可以是任意信息,根据服务器需要进行组合
请求头 | 描述 |
---|---|
Host | 主机ip地址或域名 |
User- Agent | 客户端相关信息,如操作系统、刘览器等信息 |
Accept | 指定客户端接收信息类型,如: image/jpg, text/html, application/json |
Accept-Charset | 替换资源 |
Accept-charaet | 客户端接受的字符集,如gb2312,iso-8859-1 |
Accept-Encoding | 可接受的内容编码,gzip |
Accept-Language | 接受的培言,如Accept-Langunge: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响应报文主要由状态行,消息头部、空一行、响应体4部分组成。
状态行
请求行由HTTP协议版本字段、状态码字段及其描述3个字段组成,它们用空格分隔。
状态码:用以表示网页服务器HTTP响应状态的3位数字代码
状态码 | 描述 |
---|---|
1XX | 提示信息,请求被成功接收 |
2XX | 成功,请求被成功处理 |
3XX | 重定向相关 |
4XX | 客户端错误 |
5XX | 服务器端错误 |
常用状态码:https://blog.csdn.net/qq_35689573/article/details/82120851
响应头
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 设置Cookie |
Last-Modified | 资源最后修改时间 |
Content-Length | 内容长度 |
Connection | 如:Content-Type:text/html;charset=utf-8 |
Connection | 如keep-Alive,表示保持tcp链接不关闭,不回永久保持链接,服务器可设置 |
Location | 指明重定向的位置,新的URL地址,如304的情况 |
Fiddler使用
fiddler安装
注意:Fiddler2需要.NET v2,Fiddler4需要.NET v4,不过这些也不用怎么管,下载用默认的就好了。
官网下载:https://www.telerik.com/fiddler
由于是Fiddler只支持Windows XP到Windows 10,安装我就不多说了,exe傻瓜式安装
fiddler的主界面
端口修改,是否进行系统代理,常用操作
菜单栏(设置选项)
File菜单
- Capture Traffic是个开关,可以控制是否把Fiddler注册为系统代理。当把Fiddler注册为系统代理时,所有依赖于WinINET代理的应用(如IE浏览器和其他浏览器)会把Web请求发送给Fiddler.
- New Viewer 是用来打开一个新的fiddler窗口
- Load Archive 用于重新加载之前保存的fildder文档
- Save 保存session会话
- Import Sessions… 导入session会话
- Export Sessions 导出session会话
- Exit 退出
Edit菜单
- Copy下面的几个子菜单分别支持复制选中Session的某些信息。
- Remove下面的子菜单分别支持从Web Session列表中删除全部、选择或未选中的Session
- Select All命令选择Sessions列表的所有内容。
- Paste as Session命令会基于剪贴板上的内容,生成一个或多个模拟的Web Session.
- Find Session命令会打开Find Session窗口,搜索捕获到的数据流。
Rules菜单
一般会点击 Hide CONNECTS+Hide 304s
-
Hide Image Request触发器控制是否在Web Session列表中显示图像类Session.
-
Hide CONNECTS触发器控制是否在Web Session列表中显示使用CONNECT请求方法的Session(一般会选择)
-
Automatic Breakpoints子菜单控制Fiddler是否会自动在Before Requests或After Responses处设置断点。Ignore Image触发器控制这些断点是否作用于图片请求
-
Customize Rules…菜单命令会使用配置的脚本编辑器打开当前的FiddlerScript文件
-
如果选中Require Proxy Authentication菜单项,所有未提交Proxy-Authorization请求头的请求会返回HTTP/407响应,要求客户端安装证书
该规则可以用于测试HTTP客户端,确保这些规则在有证书的客户端服务器上可以正常工作。
-
如果选中Apply GZIP Encoding菜单项,只要请求包含具有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子菜单提供影响Web性能的简单选项
Tools菜单栏
-
Fiddler Options…打开Fiddler Options窗口,针对fiddler的设置
-
WinINET Options…打开IE的Internet Options窗口,windows 的ie设置
-
Clear WinINET Cache选项会清空IE和其他应用中所使用的WinINET缓存中的所有文件
-
Clear WinINET Cookies选项会清空IE和其他应用中所发送的WinINET Cookie.
Session的Cookies还是保持不变
-
TextWizard…对文本进行编码和解码的工具
-
Compare Session选项只有当选中Web Session列表中的两个Session时才有效。
-
Reset Script 重置脚本
-
Sandbox,打开http://webdbg.com/sandbox/
-
View IE Cache
-
New Session Clipboard…打开一个Session的剪贴板
-
HOSTS…选项会打开Fiddler的Host Remapping工具
View菜单栏
-
Show Toolbar控制Fiddler工具栏是否可见
-
Default Layout、Stacked Layout、Wide Layout三种界面布局
-
Minimize to Tray或按下CTRL+M可以最小化Fiddler到系统托盘中
-
Squish Session List控制Web Session列表是否水平收缩
-
AutoScroll Session list选项控制当添加新的Session时,Fiddler是否会自动滚动到Session列表的底部
help菜单栏
- Help 获取帮助
- Fiddler Book 开发者写的书
- Discussions 讨论
- HTTP References HTTP参考文献
- Troubleshoot… 疑难解答
- Get Priority Support… 购买最新支持
- Check for Support… 寻找支持
- Check for Updates… 检查更新
- Send Feedback… 反馈
- About 相关内容
工具栏
工具栏依次是:Replay:会话保存,数据重放、GO:转到、Stream:数据流、Decode:解码、session:保持所以会话、Process:进程、Find:查找、Save:保存、Browse:浏览、clear Cache:清除缓存、TextWizard:文字编码、Tearoff:分离、Online:本机网络信息,可以看到本机ip
相关快捷键
Shift + F5 是去缓存刷新快捷键
Shift + R,多次重放Session(会话)
ctrl + X ,删除所有Session
Shift + Del 删除选中以外的Session(会话)
Ctrl + F 查找会话
Session List会话列表
组成部分
- Fiddler抓取到的每条http请求(每一条称为一个session)
- 主要包含了请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息
字段名 | 含义 |
---|---|
# | HTTP Request的顺序,从1开始,按解页面加载请求的顺序递增[Result]– |
Result | HTTP响应的状态码,可以参考我第一篇笔记 |
Protocol | 请求使用的协议(如HTTP/HTTPS/FTP) |
Host | 请求地址的域名 |
URL | 请求的服务器路径和文件名,也包括GET参数 |
BODY | 请求的大小,以byte为单位 |
Caching | 请求的的缓存过期时间或缓存控制 header等值 |
Content-Type | 请求响应的类型(Content-Type) |
Process | 发出此请求的Windows进程及进程ID |
Commments | 用户通过脚本设置或者右键菜单给此session增加的备注 |
Custom | 用户可以通过脚本设置的自定义值 |
更改自定义用户脚本,可以完成例如增加ip列的操作,要重启fiddler才会生效。
列可以拖动列名更改排布位置
表头可以做排序,点击表头即可根据该表头的字段升序降序排序
命令行
输入help进入官方文档查询
状态栏
代理状态
显示的 Fiddler 是否处于系统代理状态,(有capture表示开启状态,点击清除图标取消代理),可以用快捷键 F12 切换或者点击该区域
会话选择
- All Processes —— 捕获所有进程的请求
- Web Browsers —— 捕获 Web 浏览器的请求,应该特指 IE
- Non-Browser —— 捕获非 Web 浏览器的请求
- Hide All —— 隐藏所有请求
断点设置
显示当前断点设置状态,通过鼠标点击切换。可以有三种:
—— 不设置断点
—— 所有请求在断点处被暂停
—— 所有响应在断点处被暂停
选择Session数
显示共选择了多少 session 及 session 总数(如图所示选择 了2 个 session,共 77 个session)
附加信息
如果是刚打开 Fiddler,会显示什么时间加载了 CustomRules.js;如果选择了一个 Session,会显示该 Session 的URL;如果在 QuickExec 命令行输入一个命令,就会显示命令相关信息。
辅助标签加工具
Statistics-统计分析
Http或Https请求的性能和其他数据分析,如DNS解析时间,TCP/TP建立连接的时间(TCP三次握手的时间)、SSL连接的时间(针对https请求)等信息。
Inspectors-检查器
直接可以双击会话打开检查器,或选择会话后点击检查器。以不同的形式展示请求或部分请求报文、响应或部分响应报文。
请求部分
-
Headers:显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等
-
TextView:显示 POST 请求的 body 部分为文本
-
SyntaxView:语法的格式
-
WebForms:显示请求的 GET 参数 和 POST body 内容,特别说明,这里的QueryString为url后接的内容;这里 body 为是 application/x-www-form-urlen-coded 格式。(form表单post请求默认是这种查看方式)
-
HexView: 用十六进制数据显示请求
-
Auth :显示 header 中的 Proxy-Authorization 和 Authorization 信息
-
Cookies:显示请求的cookie信息
-
Raw:原生的纯文本(用的较多)
-
XML:如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它
响应部分
-
Transformer :显示响应的编码信息
-
Headers :用分级视图显示响应的 header
-
TextView : 使用文本显示相应的 body
-
SyntaxView: javaScript 语法视图(相较text有高光)
-
ImageVies :如果请求是图片资源,显示响应的图片
-
HexView : 用十六进制数据显示响应
-
WebView :响应在 Web 浏览器中的预览效果
-
Auth:显示响应 header 中的 Proxy-Authorization 和 Authorization 信息
-
Caching : 显示此请求的缓存信息
-
Cookies:显示返回的cookie信息
-
Raw:原生的纯文本(用的较多)
-
JSON:返回的响应内容如果是一个json格式的,这里会显示
-
XML:如果相应的 body 是 XML 格式,就是用分级的 XML 树来显示它
AutoResponder-自动响应器
可用于拦截某一请求,进行如下操作:
- 重定向到本地的资源
- 使用Fiddler的内置响应
- 自定义响应
操作步骤
-
在AutoResponder面板下,点击
单击选择需要拦截的请求,复制请求的URL(请求右键 >> Copy >> Just Url);粘贴至右侧面板Rule Editor(或者左键按住,并拖动需要请求的url到右侧面板,此时url自动填充在Rule Editor处;或者直接去网页复制相应图片位置等)
-
设置响应的内容,可以选择Fiddler的内置响应或者是重定向至用户本地文件(或者点击规则,鼠标右键,选择Edit Response,进行自定义响应)
-
同时选中 Enable rules(使用规则)和 Unmatched requests passthrough(放行未匹配的请求)。
Fiddler自带响应
Composer-设计器
设计请求,修改请求参数,进行简单的接口测试。具体操作:鼠标左键拖动请求的url至右侧Composer面板处,请求信息会自动填充,修改请求参数,点击Execute。(接口测试,举例后端未作数据校验 )
Scratchpad多个请求,三击选中指定位置的请求。
Filters-过滤器
作用:忽略不想显示的请求,过滤出想要的请求,是一个多维度的过滤器。过滤器要起作用,必须选中Use Filters ,不用的时候记得关闭,防止出现抓不到包的情况。具体功能如下:
Hosts 主机
域过滤
- Show only Intranet Hosts:仅显示局域网的请求
- Show only Internet Hosts:仅显示广域网的请求
- No Zone Filter:无域限制(默认)
主机过滤
- No Host Filter :没有主机过滤器(默认)
- Hide the following Hosts:隐藏以下主机
- Show only the following Hosts:只显示以下主机
- Flag the following Hosts:标记以下主机
Client Process 客户端进程
- Show only traffic from:仅显示某一进程的请求
- Show only Internet Explorer traffic:仅显示IE浏览器发出的请求
- Hide traffic from Service Host:隐藏来自service host(即由svchost.exe进程)发出的请求
Request Headers 请求头
- Show only if URL contains:仅显示url中包含输入的字符串的请求
- Hide if URL contains:隐藏url中包含输入的字符串的请求
- Flag requests with headers:标记请求头中有指定内容的请求
- Delete request headers:删除请求头中的指定内容
- Set request header:设置请求头中添加指定的内容
4、Breakpoints 断点
- Break request on POST:在POST请求中设置断点(请求前设置断点)
- Break request on GET with query string:在带有请求参数的GET请求中设置断点(请求前设置断点)
- Break on XMLHTTpRequest:在ajax请求中设置断点(请求前设置断点)
- Break response on Content-type:在响应中含有指定Content-type的请求中设置断点(响应后设置断点)
5、Response Status Code 响应状态码
- Hide success(2xx):隐藏响应状态码为2XX的请求
- Hide non-2xx:隐藏响应状态码非2xx的请求
- Hide redirects(300, 301, 302, 303, 307):隐藏状态码为300、301、302、303、307的重定向请求
- Hide Authentication demands(401,407):隐藏状态码为401,407的响应(需要用户确认证书的请求)
- Hide Not Modified(304):隐藏状态码为304的响应
6、Response Type and Size 响应类型和大小
- Show all Content-Types:显示任意响应类型的请求
- Show only IMAGE/*:仅显示响应类型是图片的请求
- Show only HTML:仅显示响应类型是html的请求
- Show only TEXT/CSS:仅显示响应类型是text/css的请求
- Show only SCRIPTS:仅显示响应类型是js脚本的请求
- Show only XML:仅显示响应类型是xml的请求
- Show only JSON:仅显示响应类型是json的请求
- Hide IMAGE/*:隐藏响应类型是图片的请求
- Hide smaller than KB:隐藏响应体小于指定字节数的响应
- Hide larger than KB:隐藏响应体大于指定字节数的响应
- Time HeatMap:根据响应时间给每个请求设置背景色。小于50ms绿色,50-300ms不着色,300-500ms黄色,大于500ms红色
- Block scriptfiles:将响应类型为js脚本的请求,设置返回HTTP/404响应
- Block image files:将响应类型为图片的请求,设置返回HTTP/404响应
- Block SWF files:将响应类型为flash的请求,设置返回HTTP/404响应
- Block CSS files:将响应类型为css的请求,设置返回HTTP/404响应
7、Response Headers 响应头
- Flag responses that setcookies:将响应中设置了cookies的请求标记显示(斜体显示)
- Flag responses with headers:将响应头中包含指定内容的请求标记显示(加粗显示)
- Delete responseheaders:删除响应中指定的响应头
- Set response header:将响应头中添加指定的内容