一、初识Fiddler
①B/S架构简介和请求过程理解
B/S架构的分层:
与C/S架构只有两层不同的是,B/S架构有三层,分别为:
第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
第三层数据层:主要是接受客户端请求后独立进行各种运算。
B/S架构的优点:
1、客户端无需安装,有Web浏览器即可。
2、BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
3、BS架构无需升级多个客户端,升级服务器即可。可以随时更新版本,而无需用户重新下载。B/S架构的缺点:
1、在跨浏览器上,BS架构不尽如人意。
2、表现要达到C/S程序的程度需要花费不少精力。
3、在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
4、客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)
②Fiddler原理
Fiddler是一个代理服务器。代理地址:127.0.0.1,端口:8888。浏览器可以通过设置查看代理服务器:设置->高级->打开您计算机的代理设置->连接->局域网设置->代理服务器->在高级中就能看到代理地址:127.0.0.1和端口:8888
当浏览器向服务器请求数据时,被Fiddler截获,截获后再发送给服务器,当服务器向浏览器响应数据时,同样会被Fiddler截获,然后再发送给浏览器,所以我们能够在Fiddler中看到请求的报文和响应的报文。
关掉Fiddler、代理服务器会自动取消。如果Fiddler非正常退出,因为Fiddler没有自动注销,可能会造成网页无法访问。解决的办法是重新启动Fiddler。
③Fiddler安装
- Fiddler官网下载地址:https://www.telerik/fiddler
- Fiddle证书生成器下载地址:http://www.telerik/docs/defaultsource/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
- Fiddler安装注意事项:不要安装在有中文和特殊字符的目录。
Fiddler的配置
在Tools–>options弹框,点击connections,端口8888可修改为其他数字,并勾选Allow remote computers to connect,点击OK
在options弹框中切换至HTTPS,勾选图中标记的2个选项并点击OK
勾选后会弹出安装证书的提示,根据提示一直点击“是”即可安装成功
④Fiddler菜单栏
File菜单
Edit 菜单
Rules菜单
Tools 菜单
View 菜单
⑤Fiddler工具栏
⑥Fiddler状态栏和Quick Exec
状态栏
Capturing
All Processes
Breakpoint
全局断点分为:
- 全局请求断点:指在将请求发送给服务器之前,打一个断点,此时我们可以对请求进行修改。
- 全局响应断点:指在将服务器的响应发送到客户端之前,打一个断点,此时我们可以对响应进行修改
上图中,断点开启按钮默认是一个空白,表示没有开启断点。如果我们点击一次,则将开启全局请求断点
如果我们继续点击一次,则将开启全局响应断点
如果我们再次点击一次,则取消全局断点功能
如何取消这些断点
- 逐个释放断点,选中被打断点的请求,点击
Run to Completion
按钮释放断点
- 释放全部断点,点击工具栏的
Go
按钮Session Counter
Status Information
二、HTTP协议
①HTTP协议概述
- HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
- HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0
- 协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
- HTTP报文:
它是HTTP应用程序之间发送的数据块
。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。注意: 当我们访问一些网页时,是显示通过 HTTPS 来进行通信的,并且当下大多数的网页都是通过 HTTPS 来进行通信的,因为 HTTPS 在 HTTP 的基础上做了一个加密的工作
②HTTP协议请求报文详解
请求报文:从客户端发往服务器的报文叫请求报文。
HTTP的请求报文由四部分组成:请求行(request line)、请求头部(header)、空行和请求数据(request data)
请求行
由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。
例如:GET http://jsuacm/template/jsu/css/modifypage-1.css HTTP/1.1
请求方法
URL
- URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。
- 组成:<协议>://<主机>:<端口>/<路径>
- 端口和路径有事可以省略(HTTP默认端口号是80)
HTTP协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1,现在最常用的是1.1
HTTP 1.0和HTTP 1.1的主要区别是什么?
- 长连接 :在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP1.1起,默认使用长连接 ,默认开启Connection: keep-alive
- 带宽优化及网络连接的使用:
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- Host域:HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
- 错误状态响应码:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理:
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
请求头
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息
空行
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据(请求体)。
请求体(请求数据)
请求数据不在GET方法中使用,而在POST方法中使用
③HTTP协议响应报文详解
http响应报文主要由响应行(状态行)、响应头(消息报头)、空行、响应体(响应正文)
状态码
响应头
④Cookie和Session
Cookie
(1)Cookie是什么 ?
Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
(2)为什么要使用Cookie?解决了什么问题 ?
- web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。cookie的出现就是为了解决这个问题。
- 第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
- 特点:cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
- 给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
(3)Cookie什么时候产生 ?
- Cookie的使用一先要看需求。因为浏览器可以禁用Cookie,同时服务端也可以不Set-Cookie。
- 客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie然后浏览器将Cookie保存
- Cookie有两种保存方式,一种是浏览器会将Cookie保存在内存中,还有一种是保存在客户端的硬盘中,之后每次HTTP请求浏览器都会将Cookie发送给服务器端。
(4)Cookie的生存周期?
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
(5)Cookie有哪些缺陷 ?
- ①数量受到限制。一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的Cookie 总数不能超过 20 个
- ②安全性无法得到保障。通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。
- ③浏览器可以禁用Cookie,禁用Cookie后,也就无法享有Cookie带来的方便。
(6)cookie的应用场景
Session
(1)web中什么是会话 ?
用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
(2)什么是Session ?Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。
(3)Session什么时候产生 ?当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。
这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让他进入到cookie里。
服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session。再次访问时会带入会发送cookie给服务器,其中就包含sessionID。
服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他之前操控些、访问过哪里。
(4)Session的生命周期 ?根据需求设定,一般来说,半小时。举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。
小结:Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
cookie和session结合使用
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
三、进一步认识Fiddler
①Session List会话列表
②辅助标签+工具
Get Started:
初始页,上面显示了一些
Fiddler
相关的新手基础操作的指引与软件推广信息,如果需要关闭的话就将页面左下角的Show on startup
取消勾选即可Statistics:—>查看详情
根据在会话列表中选中会话进行统计与分析
点击
Statistics
页面底部的Show Chart
相关的数据会以饼状图的形状展示出来,大概可以查看出哪一种类型的数据占据最多
Collapse Chart
按钮关闭图标展示,Copy this chart
按钮复制图表。Inspectors
该功能用于显示会话列表中选定会话的请求和响应信息,选中该选项卡后,下方区域就会变成
HTTP
请求区域与HTTP
响应区域,在该选项卡下还存在多个子选项卡,分别代表着各类显示风格与请求和响应内的其他组成内容请求报文区按钮说明:
- Headers:显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包括 Cookie、设备信息
- TextView:显示 POST 请求的 body 部分为文本
- SyntaxView:为 Textview 的加强版,查看语法高亮的请求内容。加上了行数标识,鼠标右键的菜单中,相较Textview 多了一些功能,如 Json、XML 格式化,查找替换等
- WebForms:显示请求的 GET 参数 和 POST body 内容。特别说明,这里 body 应该是 application/x-www-form-urlen-coded 格式
- HEX:用十六进制数据显示请求
- Auth:header 中的 Proxy-Authorization 和 Authorization 信息
- Cookies:请求发送的 cookies 信息
- Raw:将整个请求显示为纯文本
- JSON:如果请求的 body 是 Json 格式,就是用分级的 Json 来显示它
- XML:如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它
响应报文区按钮说明:
- Transformer:显示响应的编码信息
- Headers:显示响应的 header
- TextView:使用文本显示相应的 body
- SyntaxView:为 Textview 的加强版,查看语法高亮的请求内容。加上了行数标识,鼠标右键的菜单中,相较Textview 多了一些功能,如 Json、XML 格式化,查找替换等
- ImageView:如果请求是图片资源,显示响应的图片。左侧灰色区域会显示图片的大小、宽高、文件格式等信息,在下方还可以选择缩放模式:Autoshrink(自动缩放)、Scale to fit(缩放以适应显示区域大小)、No Scaling(无缩放)
- HexView:用十六进制数据显示响应
- WebForms:响应在 Web 浏览器中的预览效果
- Auth:显示响应 header 中的 Proxy-Authorization 和 Authorization 信息
- Caching:显示此请求的缓存信息
- Cookies:显示此请求的 cookies 信息,私密 P3P Header 信息
- Raw:将整个响应显示为纯文本
- JSON:如果响应的 body 是 Json 格式,就是用分级的 Json 来显示它
- XML:如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它
AutoResponder
除了使用断点方式来拦截请求,也可以使用 AutoResponder 方式来拦截请求
Fiddler 的自动响应选项卡(AutoResponder)提供了 Fiddler 最强大的一些功能。它支持创建规则,可以在响应请求时自动触发,常见例子是返回之前捕捉的响应,而不需要访问服务器。
Fiddler 自动响应选项卡界面下图:
- Enable rules:复选框用来控制是否激活自动响应选项卡
- Unmatched requests passthrough:复选框用来控制当会话不匹配任何给定的规则时会发生什么。如果选中该选项,不匹配的请求会正常发送到服务器。如果没有选中该选项,Fiddler 会为所有和该规则完全不匹配的 HTTP 请求生成 HTTP/404 Not Found 响应。如果客户端发送的是条件请求,其中包含请求头 If-None-Match 或 If-Modified-Since,那么会返回响应 HTTP/304 Not Modified。
- Enable Latency:选项控制匹配某个规则的请求是立即执行,还是延迟 Latency 字段中所指定的毫秒数。如果没有选中该选项,Latency 字段就不会显示。使用这个选项可以更准确地模拟现实中的服务器响应,取消该选项可以提升性能。
- Add Rule:点击该按钮添加一个新的 AutoResponder 规则。
- Group:点击该按钮对多个规则进行分组,这样便于统一开启/禁用规则。
- Import:点击该按钮支持导入之前捕获的 SAZ 文件,导入文件中的每个会话会被用于规则列表中生成新的规则。你还可以导入 FARX 文件,它包含从 AutoResponder 选项卡导出的规则。如下图:
Composer
Fiddler 的 Composer 选项卡支持手动构建和发送 HTTP、HTTPS 和 FTP 请求。此外,还可以从 Web 会话列表中拖拽会话,把它放到 Composer 选项卡中,把该 Session 的请求复制到用户界面。点击 Execute 按钮,把请求发送到服务器端。如下图
从上图可知,
Composer
选项卡是由三个子选项卡组成的:Parsed
、Raw
、Scratchpad
和Options
选项卡。下面将按序解释每个选项卡请求选项卡(Options )
- Inspect Session:请求执行后,Inspectors 选项卡会被激活,可以查看请求的结果
- Fix Content- Length header:该选项控制 Composer 是否会自动添加或修改 Content-Length 请求头,表示请求体的大小。在很多情况下,缺少适当的 Content-Length 头的请求会 HANG 住或导致 HTTP 响应出错
- Follow Redirects:该选项控制 Composer 是否会自动使用响应的 Location 头,遵循 HTTP/3xx 重定向。如果选中该选项,Composer 在失败之前最多会执行 10 次重定向
- Automatically Authenticate:该选项控制 Composer 是否会自动响应服务器的 HTTP/401 或 HTTP/407 认证需求。如果选中该选项,会使用 Fiddler 所运行的账户的 Windows 证书自动响应这些问题。要提供不同的证书集,设置 Preference fiddlerposer.AutoAuthCreds。如果服务器需要的证书和提供方的证书不同,请求会失败,通常会返回响应 HTTP/403
- Tear off button:该按钮会从主 Fiddler 窗口删除 Composer,并把它作为独立的悬浮窗口打开。如果选中 Inspect Session 选项,该选项就非常有用,因为它支持同时查看 Composer 和 Inspector 选项卡
暂存器(Scratchpad)
使用
Scratchpad
选项卡存储请求集合。如果要发出请求,请选择其文本并按Execute
按钮进行执行。如下图:Raw 请求
Raw
选项卡提供简单的文本框,可以在该文本框中输入合适的HTTP
请求。如果请求格式不对(比如忘记在请求头后截断CRLF
),点击Execute
按钮不会发起请求
Parsed
请求
Parsed
选项卡支持为每个请求组件使用独立的输入框构建请求选项卡的下方是三个输入框: 在最上方的线下是两个大的文本区:最上方的输入框支持编辑请求头。最下方的输入框支持编辑请求体。如果当前选中的 HTTP 方法不支持请求体(如:GET 方法),当在请求体输入框输入文本时,该输入框会显示红色
- 第一个输入框支持指定 HTTP 方法(如:POST)
- 第二个输入框支持指定请求的绝对 URL(必须以 http://、https:// 或 ftp:// 开头)
- 第三个输入框支持指定 HTTP 版本号(通常是 HTTP/1.1)
Fiddler Orchestra Beta
用于抓包远程计算机的数据
其中 Fiddler Orchestra 涉及到两个角色,控制器(Controller)和客户端(Client),控制器就是我们正在使用的 Fiddler 软件,其功能是用来收集数据和控制任何一个客户端,而客户端则是向任何其运行所在的 Windows,Linux,Mac 主机上收集接收过来的流量将其通过加密的方式报告发送给控制器,控制器会在 Fiddler 软件上的会话端显示
FiddlerScript
FiddlerScript
是Fiddler
提供的Jscript
脚本,让我们在Fiddler
的基础上扩展实现一些其他更强大的功能。Fiddler Script Editor
提供了语法高亮,以及智能提示的功能- FiddlerScript 基于 JScript.NET 语言。在 Fiddler 中点击菜单 Rules > Customize Rules 打开 FiddlerScript Editor 编辑器,在这里可以编写 Fiddler Script 脚本,只要一保存,Fiddler 将会重新编译脚本并自动加载。
Log
Fiddler
的Log
选项卡收集日志消息字符串,这些字符串是由扩展、FiddlerScript
或Fiddler
本身生成的。Fiddler
会记录应用事件(如:当保存或加载SAZ
文件)以及系统事件(如:系统的网络连接丢失或恢复)的响应通知右击 Log 文本框,会显示上下文菜单,提供和日志交互的一些基本命令:
- Copy:把选中的文本复制到剪贴板
- Send to Session List:将事件日志作为会话保存到Web会话列表
- Save to File… :把当前日志保存到磁盘文件中。可以是纯文本格式,也可以是格式化的富文本格式(.rtf)
- Clear:清空Log中的所有文本
Log 选项卡支持简单的宏命令,可以从 QuickExec 文本框中调用这些命令。例如:
清空日志
log @Log.Save
在 Web 会话列表中生成新的会话,该会话的响应体包含 Log 选项卡的文本log @Log.Save
把 Log 选项卡的文本保存到指定的文件。文件名以 .rtf 结尾,可将文件保存为富文本格式,保存大小和权重,或以文件名以 .txt 结尾保存为纯文本log "@Log.Erport\"filename\""
Filters
在 Fiddler 中,Filters(过滤器)选项卡提供了非常方便地将简单的过滤规则应用到正在捕捉的数据流上的方法。在 Filters 选项卡上面的所有操作 FiddlerScript 可以模拟(通常更准确或强大),但是对于简单的任务,Filters 选项一般就足够满足过滤需求。
上图中,选中 Filters 选项卡左上方的 Use Filters 复选框后,就可以使用 Filters 给出的过滤器对流量进行过滤了。选中 Use Filters 复选框后,对于选定的会话,可以对该会话进行如下过滤操作:
- 是否隐藏显示
- 是否在 Web 会话列表中添加标识
- 是否设置断点用于人工调试
- 是否阻断发送
- 是否自动修改其数据头
Fiddler 还会为隐藏的会话提供代理功能,即使在 Web 会话列表中没有显示这些会话。
选项卡右上方的 Actions 按钮支持把当前选中的过滤器作为过滤集,加载之前保存的过滤集,并对之前捕捉到的数据流应用当前过滤规则。如下图:
Hosts(主机过滤)
提供根据主机名过滤的功能
Hosts 过滤支持:
按区域进行过滤(Zone Filter),如果选择只显示局域网会话(Show only Interanet Hosts),Fiddler 将只会列出属于局域网的会话。如果选择只显示互联网的会话(Show only Internet Hosts),Fiddler 将只会列出属于互联网的会话
按主机进行过滤(Host Filter),如果选择隐藏一下主机(Hide the following Hosts),Fiddler 将隐藏 Hosts 输入框输入的主机。如果选择只显示以下主机(Show only the following Hosts),Fiddler 将仅仅显示 Hosts 输入框输入的主机。如果选择标记以下主机(Flag the following Hosts),Fiddler 将在 Web 会话列表中加粗显示 Hosts 输入框中输入主机的所有会话
注意:
(1)修改过滤器后,需要执行“Actions”的“Run Filterset now”按钮,使修改后的过滤器配置立即生效。
(2)Hosts 文本框不会自动通过通配符匹配子域名。如果你设置了“Show only the following Hosts”并且在列表中只有hxstrive,那么将无法看到 www.hxstrive 网站下的数据流。为了查看 hxstrive 域名下所有的数据流,需要手动添加通配符 。例如:.hxstrive。
在通配符方式下就可以包含如 test.hxstrive 和 doc.hxstrive 这样的网站。如果你想查看根目录 hxstrive下的数据流,可以把通配符改成 *hxstrive 的形式 —— 这样就可以包含所有域名以 hxstrive 结束的数据流,前面不需要加点。如果有多个 host,可以使用分号分隔。Client Process(客户端进程)
进程过滤器用于控制
Fiddler
显示哪个进程的数据流。应用程序只有和Fiddler
运行在相同的主机时,Fiddler
才能判断出是哪个进程发出的哪个请求Request Headers(请求头)
Timeline
Fiddler 的时间轴(TimeLine)选项卡支持使用 瀑布 模型查看 1 到 250 个选中的会话,这对于性能分析和理解请求之间的关联是很有用的。
选项卡的主体内容就是数据流视图。页面的上方是标题,显示时间轴模式(默认情况下是 传输时间轴 Transfer Timeline)。点击右上方的帮助(Help)链接,会使用浏览器打开关于该功能的帮助页面。如下图
注意:
(1)Client Pipe Map 和 Server Pipe Map 模式显示客户端和服务器之间如何复用连接,对判断性能瓶颈非常有帮助。
(2)时间轴选项卡并不显示任何 CONNECT 通道,因为该通道的数据流可能是模糊的,也可能是由一个或多个解密的 HTTPS Web 会话项跟踪。
③命令行
- Fiddler 的 Web 会话列表下的 QuickExec 对话框中提供了常见操作的快捷方式。当 Fiddler 处于活动状态时,使用 Alt+Q 快捷键可以把光标快速定位到 QuickExec 输入框。如果 Fiddler 没有处于活动状态,则需要先使用 CTRL+ALT+F 键激活 Fiddler 窗口,再使用 Alt+Q 键将光标定位到 QuickExce 输入框。
- 当光标定位在 QuickExec 输入框,按下 CTRL+I 键会把选中的第一个会话的 URL 插入到 Web 会话列表中。你还可以从 Web 会话列表中拖动/释放一个或多个会话,把 URL 插入到 QuickExec 对话框;你也可以从文件系统中将一个或多个文件拖入到文件路径中。
你可以在
QuickExce
框中输入help
回车,使用浏览器打开QuickExce
在线命令帮助文档常用快捷命令:
文本查找
在
QuickExec
中输入?searchtext
字符串,Fiddler
将高亮显示Web
会话列表包含searchtext
文本的Web
会话。
响应大小过滤
- 在
QuickExec
中输入>size
字符串,Fiddler
将高亮显示Web
会话列表中响应大小大于size
字节的Web
会话- 如果我们在
QuickExec
中输入<size
字符串,Fiddler
将高亮显示Web
会话列表中响应小于size
字节的Web
会话
状态/方法过滤
在
QuickExec
中输入=状态
或者=方法
字符串,Fiddler
将高亮显示Web
会话列表中等于指定状态,或者等于指定状态的Web
会话。
匹配主机
在
QuickExec
中输入@host
字符串,Fiddler
将高亮显示Web
会话的请求主机包含host
的会话
突出显示会话:
在
QuickExec
中输入bold sometext
字符串,Fiddler
将后续抓到的,且包含sometext
字符串的会话加粗显示
根据字符匹配创建响应断点
在
QuickExec
中输入bpafter sometext
字符串,Fiddler
将在收到的、包含sometext
字符串的会话上添加响应断点。如果输入无参的bpafter
字符串,则将取消添加响应断点操作(注意:这只对执行该操作后收到的会话)
根据状态码创建响应断点
在
QuickExec
中输入bps status
字符串,Fiddler
将在收到的、状态等于status
的会话上添加响应断点。如果输入无参的bps
字符串,则取消为状态添加响应断点的操作(注意:这只对执行该操作后收到的会话)
根据请求方法创建请求断点
在
QuickExec
中输入bpv method
字符串,Fiddler
将在收到的、HTTP
方法为method
的会话添加请求断点。如果输入无参的bpv
字符串,则取消根据HTTP
方法添加请求断点的操作注意,也可以使用
bpm method
添加请求断点,使用bmp
(无参)禁用请求断点。
根据字符串匹配创建请求断点
在
QuickExec
中输入bpu sometext
字符串,Fiddler
将在收到的、包含sometext
字符串的URI
会话创建请求断点。如果输入无参的bpu
字符串,将禁用创建请求断点
恢复所有断点会话
在
QuickExec
中输入g
或者go
字符串,Fiddler
将恢复所有断点会话
清理会话列表
在
QuickExec
中输入cls
或者clear
字符串,Fiddler
将清理所有的会话列表
会话备份
在
QuickExec
中输入dump
字符串,Fiddler
将所有会话转储到C:\
中的zip
存档
最小化到托盘
在
QuickExec
中输入hide
字符串,Fiddler
主界面将隐藏到任务栏
替换URL
在
QuickExec
中输入urlreplace str1 str2
字符串,Fiddler
将收到会话的URL
中的str1
字符串替换成str2
。如果输入不带参数的urlreplace
字符串,则取消URL
替换功能
开始抓包(start)
在
QuickExec
中输入start
字符串,可以开启Fiddler
抓包
停止抓包(stop)
在
QuickExec
中输入stop
字符串,可以停止Fiddler
抓包
关闭 Fiddler
在
QuickExec
中输入quit
字符串,去关闭Fiddler
过滤响应 Content-Type
在
QuickExec
中输入select someText
字符串,Fiddler
将会选择响应Content-Type
头包含指定的someText
字符串的任何会话。
其他过滤方式
前面介绍了根据
Content-Type
过滤响应,Fiddler
还支持其他更多的过滤方式。Fiddler
提供了两个内置变量@Request
和@Response
对象,使用这两个对象可以过滤其他头字段。例如:根据请求User-Agent
头字段过滤会话上图中,我们使用
@Request.User-Agent Mozilla
选择所有用户User-Agent
包含Mozilia
字符串的会话
条件隐藏
在
QuickExec
中输入allbut image
或者keeponly image
字符串,Fiddler
将隐藏响应会话的Content-Type
中未包含image
字符串的所有会话。
执行 DNS 查找
对目标主机执行
DNS
查找并在LOG
选项卡上显示结果
监听额外端口
!listen 8889 !listen 4443 localhost !listen 444 secure.example
四、常用功能
1. 抓取指定 IP 地址的包
这里需要使用到过滤器,点击 Filters 按钮
勾选
Use Filters
(使用过滤器)
Host Filter
选择Show only the following Hosts
,在文本框中输入IP
地址,用;
隔开,然后再点击Changes not yet saved.
保存即可如果想要去掉
URL
中包含css
、js
、image
等包,可将Hide if URL contains
也勾选上之后抓取的包就只有跟你所设置
IP
相关的包了
2. 抓取 HTTPS 协议的包
默认情况下
Fiddler
是不支持抓取https
协议的包的,比如我访问百度https://www.baidu/
,会话列表是不会有会话的这个时候需要在
Tools
>Options...
打开
Options
界面选中HTTPS
Capture HTTPS CONNECTs:表示我们能够抓取到 HTTPS 连接(Fiddler 默认情况下将 HTTPS 连接隐藏了的,查看菜单 Rules -> Hide CONNECTs 是否被勾选)
Decrypt HTTPs traffic:表示会对收到的 HTTPS 流量尝试使用 Fiddler 的证书进行解码如果勾选了
Decrypt HTTPS traffic
该复选框,且以前没有安装Fiddler
证书。此时,Fiddler
将弹出提示安装证书直接点击
Yes
即可,Window
系统将弹出安全警告点击
是
,安装Fiddler Root
证书到Windows
中。接下来,提示是否将Fiddler Root
证书添加到本机Root
证书列表如果你还是不放心证书是否真的安装成功了。可以在
HTTPS
选项卡中点击Actions
,选择Open Windows Certificate Manger
去打开Windows
证书管理器在打开的证书管理器中,点击
操作
菜单,选择查找证书
,在包含
输入框中输入Finddler
查找Fiddler
相关的证书,如果能够正常看见Fiddler
证书,说明证书安装成功
3. 手机 APP 抓包
首先得保证手机和电脑在同一个局域网(连接着同一个
WIFI
),先查看Fiddler
所在电脑得IP
地址,可以Win + R
调出windows 运行窗口
输入cmd
再输入ipconfig
查看IP
地址设置
Fiddler
允许远程连接,点击Tools
选择Options...
,再选中Connections
勾选
Allow remote computers to connect
允许远程计算机连接到Fiddler
注意:
Fiddler Classic listens on port
后面是Fiddler
的默认端口8888
,一般不做修改接着就是为手机配置代理,打卡手机的
设置
,找到WLAN 配置
4. 发送序列化请求
5. 发送上传文件请求
在 Fiddler 组合器的 Parsed 选项卡上,可以通过点击选项卡右上方的上传文件(Upload File)链接创建文件上传,会弹出 Select File for Upload 文件选择窗口。如果请求方法是 PUT,只能选择一个文件;如果请求方法是 POST,可以选择多个文件
选中上传的文件后,Composer 可以创建包含适当格式的请求;当请求执行时,请求体中的所有 @INCLUDE 引用会替换成指定文件的内容。
在 HTTP 中,文件上传是使用 PUT 或 POST 方法执行的。当使用 PUT 方法执行文件上传时,请求体通常包含文件的原始内容,如下图:使用
POST
方法上传通常会使用Content-Type: multipart/form-data
对请求体进行格式化,如下图注意:使用POST
上传方式,需要编辑Name
属性,确保它和服务器的表单字段名称匹配。
6.Fiddler如何定位bug是前后端的问题
查看请求的http状态码是否正确。
- 若抓取到的请求返回的http状态码为404,说明可能是前端JS 提交了错误的地址,也可能是后端服务器没有对应地址的服务;
- 若抓取到的请求返回的http状态码为500,说明是后端服务器内部错误。
- 查看请求的http状态码200但界面提示报错,则具体分析request及response信息,确认是否前端请求传参错误,若前端对应请求地址及传参都正确,则确认后端问题。
抓包分析:
- 看对应的接口有没有触发请求,如果没有请求或请求有问题,那就是前端的BUG。
- 如果前端请求没问题,就看后端返回报文,根据接口文档,返回的数据有误,要具体分析报错的内容。如果是前端传参不对导致的,那就是前端问题,如果传参正确,后端处理不正确,那可能就是后端问题。
- 如果后端响应了且数据和接口文档一致,那就是前端展示的问题。
- 总结,按前端→后端→前端的顺序进行分析。
- 举例:比如一个登录界面,输入用户名密码后点击【登录】发现无响应怎么回事?类似的问题还有,一个支付功能,支付成功后在我的订单里却没有显示。或者一个查询功能,输入条件查询后没有数据展示出来(先排除是否是因为数据库没有数据导致的)。一般都可以套用上面的回答。
详细过程
Chrome浏览器操作Bug复现操作过程,可以在Fiddler看到很多的请求信息
- 排除法:通过host来排除,host这一列,不是我访问网址的域名信息,全部删除
- ctrl+f快速搜索:是你复现问题时,从UI界面输入的数据,那么在此请求中是一定包含
双击搜索的请求,再进行确定
分析请求数据,判断Bug
- fiddler 没有抓到请求信息,可能是前端页面元素没有绑定事件,也有可能是前端发生了JS 错误,一般就是前端的bug 。
- fiddler抓取到的请求但是返回的结果错误,首先确认一下,是否是前端传输的数据是错的,数据错误则是前端的bug ,数据正确,一般就是后端的bug。
- fiddler抓取到的请求,其返回值的HTTP状态码是500(5xx),说明是后端服务器的内部错误,一般就是后端的bug。
- fiddler抓取到的请求,其返回值的HTTP状态码是404(4xx),说明请求错误,如果确定请求地址、参数没有问题,一般就是前端问题。
Android APP抓包详解
Fiddler-IOS APP抓包详解
Fiddler-Willow插件安装
一、初识Fiddler
①B/S架构简介和请求过程理解
B/S架构的分层:
与C/S架构只有两层不同的是,B/S架构有三层,分别为:
第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
第三层数据层:主要是接受客户端请求后独立进行各种运算。
B/S架构的优点:
1、客户端无需安装,有Web浏览器即可。
2、BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
3、BS架构无需升级多个客户端,升级服务器即可。可以随时更新版本,而无需用户重新下载。B/S架构的缺点:
1、在跨浏览器上,BS架构不尽如人意。
2、表现要达到C/S程序的程度需要花费不少精力。
3、在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
4、客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)
②Fiddler原理
Fiddler是一个代理服务器。代理地址:127.0.0.1,端口:8888。浏览器可以通过设置查看代理服务器:设置->高级->打开您计算机的代理设置->连接->局域网设置->代理服务器->在高级中就能看到代理地址:127.0.0.1和端口:8888
当浏览器向服务器请求数据时,被Fiddler截获,截获后再发送给服务器,当服务器向浏览器响应数据时,同样会被Fiddler截获,然后再发送给浏览器,所以我们能够在Fiddler中看到请求的报文和响应的报文。
关掉Fiddler、代理服务器会自动取消。如果Fiddler非正常退出,因为Fiddler没有自动注销,可能会造成网页无法访问。解决的办法是重新启动Fiddler。
③Fiddler安装
- Fiddler官网下载地址:https://www.telerik/fiddler
- Fiddle证书生成器下载地址:http://www.telerik/docs/defaultsource/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
- Fiddler安装注意事项:不要安装在有中文和特殊字符的目录。
Fiddler的配置
在Tools–>options弹框,点击connections,端口8888可修改为其他数字,并勾选Allow remote computers to connect,点击OK
在options弹框中切换至HTTPS,勾选图中标记的2个选项并点击OK
勾选后会弹出安装证书的提示,根据提示一直点击“是”即可安装成功
④Fiddler菜单栏
File菜单
Edit 菜单
Rules菜单
Tools 菜单
View 菜单
⑤Fiddler工具栏
⑥Fiddler状态栏和Quick Exec
状态栏
Capturing
All Processes
Breakpoint
全局断点分为:
- 全局请求断点:指在将请求发送给服务器之前,打一个断点,此时我们可以对请求进行修改。
- 全局响应断点:指在将服务器的响应发送到客户端之前,打一个断点,此时我们可以对响应进行修改
上图中,断点开启按钮默认是一个空白,表示没有开启断点。如果我们点击一次,则将开启全局请求断点
如果我们继续点击一次,则将开启全局响应断点
如果我们再次点击一次,则取消全局断点功能
如何取消这些断点
- 逐个释放断点,选中被打断点的请求,点击
Run to Completion
按钮释放断点
- 释放全部断点,点击工具栏的
Go
按钮Session Counter
Status Information
二、HTTP协议
①HTTP协议概述
- HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
- HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0
- 协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
- HTTP报文:
它是HTTP应用程序之间发送的数据块
。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。注意: 当我们访问一些网页时,是显示通过 HTTPS 来进行通信的,并且当下大多数的网页都是通过 HTTPS 来进行通信的,因为 HTTPS 在 HTTP 的基础上做了一个加密的工作
②HTTP协议请求报文详解
请求报文:从客户端发往服务器的报文叫请求报文。
HTTP的请求报文由四部分组成:请求行(request line)、请求头部(header)、空行和请求数据(request data)
请求行
由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。
例如:GET http://jsuacm/template/jsu/css/modifypage-1.css HTTP/1.1
请求方法
URL
- URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。
- 组成:<协议>://<主机>:<端口>/<路径>
- 端口和路径有事可以省略(HTTP默认端口号是80)
HTTP协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1,现在最常用的是1.1
HTTP 1.0和HTTP 1.1的主要区别是什么?
- 长连接 :在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP1.1起,默认使用长连接 ,默认开启Connection: keep-alive
- 带宽优化及网络连接的使用:
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
- Host域:HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
- 错误状态响应码:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理:
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
请求头
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息
空行
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据(请求体)。
请求体(请求数据)
请求数据不在GET方法中使用,而在POST方法中使用
③HTTP协议响应报文详解
http响应报文主要由响应行(状态行)、响应头(消息报头)、空行、响应体(响应正文)
状态码
响应头
④Cookie和Session
Cookie
(1)Cookie是什么 ?
Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
(2)为什么要使用Cookie?解决了什么问题 ?
- web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。cookie的出现就是为了解决这个问题。
- 第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
- 特点:cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
- 给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
(3)Cookie什么时候产生 ?
- Cookie的使用一先要看需求。因为浏览器可以禁用Cookie,同时服务端也可以不Set-Cookie。
- 客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie然后浏览器将Cookie保存
- Cookie有两种保存方式,一种是浏览器会将Cookie保存在内存中,还有一种是保存在客户端的硬盘中,之后每次HTTP请求浏览器都会将Cookie发送给服务器端。
(4)Cookie的生存周期?
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
(5)Cookie有哪些缺陷 ?
- ①数量受到限制。一个浏览器能创建的 Cookie 数量最多为 300 个,并且每个不能超过 4KB,每个 Web 站点能设置的Cookie 总数不能超过 20 个
- ②安全性无法得到保障。通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。
- ③浏览器可以禁用Cookie,禁用Cookie后,也就无法享有Cookie带来的方便。
(6)cookie的应用场景
Session
(1)web中什么是会话 ?
用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
(2)什么是Session ?Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。
(3)Session什么时候产生 ?当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。
这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让他进入到cookie里。
服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session。再次访问时会带入会发送cookie给服务器,其中就包含sessionID。
服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他之前操控些、访问过哪里。
(4)Session的生命周期 ?根据需求设定,一般来说,半小时。举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。
小结:Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
cookie和session结合使用
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
三、进一步认识Fiddler
①Session List会话列表
②辅助标签+工具
Get Started:
初始页,上面显示了一些
Fiddler
相关的新手基础操作的指引与软件推广信息,如果需要关闭的话就将页面左下角的Show on startup
取消勾选即可Statistics:—>查看详情
根据在会话列表中选中会话进行统计与分析
点击
Statistics
页面底部的Show Chart
相关的数据会以饼状图的形状展示出来,大概可以查看出哪一种类型的数据占据最多
Collapse Chart
按钮关闭图标展示,Copy this chart
按钮复制图表。Inspectors
该功能用于显示会话列表中选定会话的请求和响应信息,选中该选项卡后,下方区域就会变成
HTTP
请求区域与HTTP
响应区域,在该选项卡下还存在多个子选项卡,分别代表着各类显示风格与请求和响应内的其他组成内容请求报文区按钮说明:
- Headers:显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包括 Cookie、设备信息
- TextView:显示 POST 请求的 body 部分为文本
- SyntaxView:为 Textview 的加强版,查看语法高亮的请求内容。加上了行数标识,鼠标右键的菜单中,相较Textview 多了一些功能,如 Json、XML 格式化,查找替换等
- WebForms:显示请求的 GET 参数 和 POST body 内容。特别说明,这里 body 应该是 application/x-www-form-urlen-coded 格式
- HEX:用十六进制数据显示请求
- Auth:header 中的 Proxy-Authorization 和 Authorization 信息
- Cookies:请求发送的 cookies 信息
- Raw:将整个请求显示为纯文本
- JSON:如果请求的 body 是 Json 格式,就是用分级的 Json 来显示它
- XML:如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它
响应报文区按钮说明:
- Transformer:显示响应的编码信息
- Headers:显示响应的 header
- TextView:使用文本显示相应的 body
- SyntaxView:为 Textview 的加强版,查看语法高亮的请求内容。加上了行数标识,鼠标右键的菜单中,相较Textview 多了一些功能,如 Json、XML 格式化,查找替换等
- ImageView:如果请求是图片资源,显示响应的图片。左侧灰色区域会显示图片的大小、宽高、文件格式等信息,在下方还可以选择缩放模式:Autoshrink(自动缩放)、Scale to fit(缩放以适应显示区域大小)、No Scaling(无缩放)
- HexView:用十六进制数据显示响应
- WebForms:响应在 Web 浏览器中的预览效果
- Auth:显示响应 header 中的 Proxy-Authorization 和 Authorization 信息
- Caching:显示此请求的缓存信息
- Cookies:显示此请求的 cookies 信息,私密 P3P Header 信息
- Raw:将整个响应显示为纯文本
- JSON:如果响应的 body 是 Json 格式,就是用分级的 Json 来显示它
- XML:如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它
AutoResponder
除了使用断点方式来拦截请求,也可以使用 AutoResponder 方式来拦截请求
Fiddler 的自动响应选项卡(AutoResponder)提供了 Fiddler 最强大的一些功能。它支持创建规则,可以在响应请求时自动触发,常见例子是返回之前捕捉的响应,而不需要访问服务器。
Fiddler 自动响应选项卡界面下图:
- Enable rules:复选框用来控制是否激活自动响应选项卡
- Unmatched requests passthrough:复选框用来控制当会话不匹配任何给定的规则时会发生什么。如果选中该选项,不匹配的请求会正常发送到服务器。如果没有选中该选项,Fiddler 会为所有和该规则完全不匹配的 HTTP 请求生成 HTTP/404 Not Found 响应。如果客户端发送的是条件请求,其中包含请求头 If-None-Match 或 If-Modified-Since,那么会返回响应 HTTP/304 Not Modified。
- Enable Latency:选项控制匹配某个规则的请求是立即执行,还是延迟 Latency 字段中所指定的毫秒数。如果没有选中该选项,Latency 字段就不会显示。使用这个选项可以更准确地模拟现实中的服务器响应,取消该选项可以提升性能。
- Add Rule:点击该按钮添加一个新的 AutoResponder 规则。
- Group:点击该按钮对多个规则进行分组,这样便于统一开启/禁用规则。
- Import:点击该按钮支持导入之前捕获的 SAZ 文件,导入文件中的每个会话会被用于规则列表中生成新的规则。你还可以导入 FARX 文件,它包含从 AutoResponder 选项卡导出的规则。如下图:
Composer
Fiddler 的 Composer 选项卡支持手动构建和发送 HTTP、HTTPS 和 FTP 请求。此外,还可以从 Web 会话列表中拖拽会话,把它放到 Composer 选项卡中,把该 Session 的请求复制到用户界面。点击 Execute 按钮,把请求发送到服务器端。如下图
从上图可知,
Composer
选项卡是由三个子选项卡组成的:Parsed
、Raw
、Scratchpad
和Options
选项卡。下面将按序解释每个选项卡请求选项卡(Options )
- Inspect Session:请求执行后,Inspectors 选项卡会被激活,可以查看请求的结果
- Fix Content- Length header:该选项控制 Composer 是否会自动添加或修改 Content-Length 请求头,表示请求体的大小。在很多情况下,缺少适当的 Content-Length 头的请求会 HANG 住或导致 HTTP 响应出错
- Follow Redirects:该选项控制 Composer 是否会自动使用响应的 Location 头,遵循 HTTP/3xx 重定向。如果选中该选项,Composer 在失败之前最多会执行 10 次重定向
- Automatically Authenticate:该选项控制 Composer 是否会自动响应服务器的 HTTP/401 或 HTTP/407 认证需求。如果选中该选项,会使用 Fiddler 所运行的账户的 Windows 证书自动响应这些问题。要提供不同的证书集,设置 Preference fiddlerposer.AutoAuthCreds。如果服务器需要的证书和提供方的证书不同,请求会失败,通常会返回响应 HTTP/403
- Tear off button:该按钮会从主 Fiddler 窗口删除 Composer,并把它作为独立的悬浮窗口打开。如果选中 Inspect Session 选项,该选项就非常有用,因为它支持同时查看 Composer 和 Inspector 选项卡
暂存器(Scratchpad)
使用
Scratchpad
选项卡存储请求集合。如果要发出请求,请选择其文本并按Execute
按钮进行执行。如下图:Raw 请求
Raw
选项卡提供简单的文本框,可以在该文本框中输入合适的HTTP
请求。如果请求格式不对(比如忘记在请求头后截断CRLF
),点击Execute
按钮不会发起请求
Parsed
请求
Parsed
选项卡支持为每个请求组件使用独立的输入框构建请求选项卡的下方是三个输入框: 在最上方的线下是两个大的文本区:最上方的输入框支持编辑请求头。最下方的输入框支持编辑请求体。如果当前选中的 HTTP 方法不支持请求体(如:GET 方法),当在请求体输入框输入文本时,该输入框会显示红色
- 第一个输入框支持指定 HTTP 方法(如:POST)
- 第二个输入框支持指定请求的绝对 URL(必须以 http://、https:// 或 ftp:// 开头)
- 第三个输入框支持指定 HTTP 版本号(通常是 HTTP/1.1)
Fiddler Orchestra Beta
用于抓包远程计算机的数据
其中 Fiddler Orchestra 涉及到两个角色,控制器(Controller)和客户端(Client),控制器就是我们正在使用的 Fiddler 软件,其功能是用来收集数据和控制任何一个客户端,而客户端则是向任何其运行所在的 Windows,Linux,Mac 主机上收集接收过来的流量将其通过加密的方式报告发送给控制器,控制器会在 Fiddler 软件上的会话端显示
FiddlerScript
FiddlerScript
是Fiddler
提供的Jscript
脚本,让我们在Fiddler
的基础上扩展实现一些其他更强大的功能。Fiddler Script Editor
提供了语法高亮,以及智能提示的功能- FiddlerScript 基于 JScript.NET 语言。在 Fiddler 中点击菜单 Rules > Customize Rules 打开 FiddlerScript Editor 编辑器,在这里可以编写 Fiddler Script 脚本,只要一保存,Fiddler 将会重新编译脚本并自动加载。
Log
Fiddler
的Log
选项卡收集日志消息字符串,这些字符串是由扩展、FiddlerScript
或Fiddler
本身生成的。Fiddler
会记录应用事件(如:当保存或加载SAZ
文件)以及系统事件(如:系统的网络连接丢失或恢复)的响应通知右击 Log 文本框,会显示上下文菜单,提供和日志交互的一些基本命令:
- Copy:把选中的文本复制到剪贴板
- Send to Session List:将事件日志作为会话保存到Web会话列表
- Save to File… :把当前日志保存到磁盘文件中。可以是纯文本格式,也可以是格式化的富文本格式(.rtf)
- Clear:清空Log中的所有文本
Log 选项卡支持简单的宏命令,可以从 QuickExec 文本框中调用这些命令。例如:
清空日志
log @Log.Save
在 Web 会话列表中生成新的会话,该会话的响应体包含 Log 选项卡的文本log @Log.Save
把 Log 选项卡的文本保存到指定的文件。文件名以 .rtf 结尾,可将文件保存为富文本格式,保存大小和权重,或以文件名以 .txt 结尾保存为纯文本log "@Log.Erport\"filename\""
Filters
在 Fiddler 中,Filters(过滤器)选项卡提供了非常方便地将简单的过滤规则应用到正在捕捉的数据流上的方法。在 Filters 选项卡上面的所有操作 FiddlerScript 可以模拟(通常更准确或强大),但是对于简单的任务,Filters 选项一般就足够满足过滤需求。
上图中,选中 Filters 选项卡左上方的 Use Filters 复选框后,就可以使用 Filters 给出的过滤器对流量进行过滤了。选中 Use Filters 复选框后,对于选定的会话,可以对该会话进行如下过滤操作:
- 是否隐藏显示
- 是否在 Web 会话列表中添加标识
- 是否设置断点用于人工调试
- 是否阻断发送
- 是否自动修改其数据头
Fiddler 还会为隐藏的会话提供代理功能,即使在 Web 会话列表中没有显示这些会话。
选项卡右上方的 Actions 按钮支持把当前选中的过滤器作为过滤集,加载之前保存的过滤集,并对之前捕捉到的数据流应用当前过滤规则。如下图:
Hosts(主机过滤)
提供根据主机名过滤的功能
Hosts 过滤支持:
按区域进行过滤(Zone Filter),如果选择只显示局域网会话(Show only Interanet Hosts),Fiddler 将只会列出属于局域网的会话。如果选择只显示互联网的会话(Show only Internet Hosts),Fiddler 将只会列出属于互联网的会话
按主机进行过滤(Host Filter),如果选择隐藏一下主机(Hide the following Hosts),Fiddler 将隐藏 Hosts 输入框输入的主机。如果选择只显示以下主机(Show only the following Hosts),Fiddler 将仅仅显示 Hosts 输入框输入的主机。如果选择标记以下主机(Flag the following Hosts),Fiddler 将在 Web 会话列表中加粗显示 Hosts 输入框中输入主机的所有会话
注意:
(1)修改过滤器后,需要执行“Actions”的“Run Filterset now”按钮,使修改后的过滤器配置立即生效。
(2)Hosts 文本框不会自动通过通配符匹配子域名。如果你设置了“Show only the following Hosts”并且在列表中只有hxstrive,那么将无法看到 www.hxstrive 网站下的数据流。为了查看 hxstrive 域名下所有的数据流,需要手动添加通配符 。例如:.hxstrive。
在通配符方式下就可以包含如 test.hxstrive 和 doc.hxstrive 这样的网站。如果你想查看根目录 hxstrive下的数据流,可以把通配符改成 *hxstrive 的形式 —— 这样就可以包含所有域名以 hxstrive 结束的数据流,前面不需要加点。如果有多个 host,可以使用分号分隔。Client Process(客户端进程)
进程过滤器用于控制
Fiddler
显示哪个进程的数据流。应用程序只有和Fiddler
运行在相同的主机时,Fiddler
才能判断出是哪个进程发出的哪个请求Request Headers(请求头)
Timeline
Fiddler 的时间轴(TimeLine)选项卡支持使用 瀑布 模型查看 1 到 250 个选中的会话,这对于性能分析和理解请求之间的关联是很有用的。
选项卡的主体内容就是数据流视图。页面的上方是标题,显示时间轴模式(默认情况下是 传输时间轴 Transfer Timeline)。点击右上方的帮助(Help)链接,会使用浏览器打开关于该功能的帮助页面。如下图
注意:
(1)Client Pipe Map 和 Server Pipe Map 模式显示客户端和服务器之间如何复用连接,对判断性能瓶颈非常有帮助。
(2)时间轴选项卡并不显示任何 CONNECT 通道,因为该通道的数据流可能是模糊的,也可能是由一个或多个解密的 HTTPS Web 会话项跟踪。
③命令行
- Fiddler 的 Web 会话列表下的 QuickExec 对话框中提供了常见操作的快捷方式。当 Fiddler 处于活动状态时,使用 Alt+Q 快捷键可以把光标快速定位到 QuickExec 输入框。如果 Fiddler 没有处于活动状态,则需要先使用 CTRL+ALT+F 键激活 Fiddler 窗口,再使用 Alt+Q 键将光标定位到 QuickExce 输入框。
- 当光标定位在 QuickExec 输入框,按下 CTRL+I 键会把选中的第一个会话的 URL 插入到 Web 会话列表中。你还可以从 Web 会话列表中拖动/释放一个或多个会话,把 URL 插入到 QuickExec 对话框;你也可以从文件系统中将一个或多个文件拖入到文件路径中。
你可以在
QuickExce
框中输入help
回车,使用浏览器打开QuickExce
在线命令帮助文档常用快捷命令:
文本查找
在
QuickExec
中输入?searchtext
字符串,Fiddler
将高亮显示Web
会话列表包含searchtext
文本的Web
会话。
响应大小过滤
- 在
QuickExec
中输入>size
字符串,Fiddler
将高亮显示Web
会话列表中响应大小大于size
字节的Web
会话- 如果我们在
QuickExec
中输入<size
字符串,Fiddler
将高亮显示Web
会话列表中响应小于size
字节的Web
会话
状态/方法过滤
在
QuickExec
中输入=状态
或者=方法
字符串,Fiddler
将高亮显示Web
会话列表中等于指定状态,或者等于指定状态的Web
会话。
匹配主机
在
QuickExec
中输入@host
字符串,Fiddler
将高亮显示Web
会话的请求主机包含host
的会话
突出显示会话:
在
QuickExec
中输入bold sometext
字符串,Fiddler
将后续抓到的,且包含sometext
字符串的会话加粗显示
根据字符匹配创建响应断点
在
QuickExec
中输入bpafter sometext
字符串,Fiddler
将在收到的、包含sometext
字符串的会话上添加响应断点。如果输入无参的bpafter
字符串,则将取消添加响应断点操作(注意:这只对执行该操作后收到的会话)
根据状态码创建响应断点
在
QuickExec
中输入bps status
字符串,Fiddler
将在收到的、状态等于status
的会话上添加响应断点。如果输入无参的bps
字符串,则取消为状态添加响应断点的操作(注意:这只对执行该操作后收到的会话)
根据请求方法创建请求断点
在
QuickExec
中输入bpv method
字符串,Fiddler
将在收到的、HTTP
方法为method
的会话添加请求断点。如果输入无参的bpv
字符串,则取消根据HTTP
方法添加请求断点的操作注意,也可以使用
bpm method
添加请求断点,使用bmp
(无参)禁用请求断点。
根据字符串匹配创建请求断点
在
QuickExec
中输入bpu sometext
字符串,Fiddler
将在收到的、包含sometext
字符串的URI
会话创建请求断点。如果输入无参的bpu
字符串,将禁用创建请求断点
恢复所有断点会话
在
QuickExec
中输入g
或者go
字符串,Fiddler
将恢复所有断点会话
清理会话列表
在
QuickExec
中输入cls
或者clear
字符串,Fiddler
将清理所有的会话列表
会话备份
在
QuickExec
中输入dump
字符串,Fiddler
将所有会话转储到C:\
中的zip
存档
最小化到托盘
在
QuickExec
中输入hide
字符串,Fiddler
主界面将隐藏到任务栏
替换URL
在
QuickExec
中输入urlreplace str1 str2
字符串,Fiddler
将收到会话的URL
中的str1
字符串替换成str2
。如果输入不带参数的urlreplace
字符串,则取消URL
替换功能
开始抓包(start)
在
QuickExec
中输入start
字符串,可以开启Fiddler
抓包
停止抓包(stop)
在
QuickExec
中输入stop
字符串,可以停止Fiddler
抓包
关闭 Fiddler
在
QuickExec
中输入quit
字符串,去关闭Fiddler
过滤响应 Content-Type
在
QuickExec
中输入select someText
字符串,Fiddler
将会选择响应Content-Type
头包含指定的someText
字符串的任何会话。
其他过滤方式
前面介绍了根据
Content-Type
过滤响应,Fiddler
还支持其他更多的过滤方式。Fiddler
提供了两个内置变量@Request
和@Response
对象,使用这两个对象可以过滤其他头字段。例如:根据请求User-Agent
头字段过滤会话上图中,我们使用
@Request.User-Agent Mozilla
选择所有用户User-Agent
包含Mozilia
字符串的会话
条件隐藏
在
QuickExec
中输入allbut image
或者keeponly image
字符串,Fiddler
将隐藏响应会话的Content-Type
中未包含image
字符串的所有会话。
执行 DNS 查找
对目标主机执行
DNS
查找并在LOG
选项卡上显示结果
监听额外端口
!listen 8889 !listen 4443 localhost !listen 444 secure.example
四、常用功能
1. 抓取指定 IP 地址的包
这里需要使用到过滤器,点击 Filters 按钮
勾选
Use Filters
(使用过滤器)
Host Filter
选择Show only the following Hosts
,在文本框中输入IP
地址,用;
隔开,然后再点击Changes not yet saved.
保存即可如果想要去掉
URL
中包含css
、js
、image
等包,可将Hide if URL contains
也勾选上之后抓取的包就只有跟你所设置
IP
相关的包了
2. 抓取 HTTPS 协议的包
默认情况下
Fiddler
是不支持抓取https
协议的包的,比如我访问百度https://www.baidu/
,会话列表是不会有会话的这个时候需要在
Tools
>Options...
打开
Options
界面选中HTTPS
Capture HTTPS CONNECTs:表示我们能够抓取到 HTTPS 连接(Fiddler 默认情况下将 HTTPS 连接隐藏了的,查看菜单 Rules -> Hide CONNECTs 是否被勾选)
Decrypt HTTPs traffic:表示会对收到的 HTTPS 流量尝试使用 Fiddler 的证书进行解码如果勾选了
Decrypt HTTPS traffic
该复选框,且以前没有安装Fiddler
证书。此时,Fiddler
将弹出提示安装证书直接点击
Yes
即可,Window
系统将弹出安全警告点击
是
,安装Fiddler Root
证书到Windows
中。接下来,提示是否将Fiddler Root
证书添加到本机Root
证书列表如果你还是不放心证书是否真的安装成功了。可以在
HTTPS
选项卡中点击Actions
,选择Open Windows Certificate Manger
去打开Windows
证书管理器在打开的证书管理器中,点击
操作
菜单,选择查找证书
,在包含
输入框中输入Finddler
查找Fiddler
相关的证书,如果能够正常看见Fiddler
证书,说明证书安装成功
3. 手机 APP 抓包
首先得保证手机和电脑在同一个局域网(连接着同一个
WIFI
),先查看Fiddler
所在电脑得IP
地址,可以Win + R
调出windows 运行窗口
输入cmd
再输入ipconfig
查看IP
地址设置
Fiddler
允许远程连接,点击Tools
选择Options...
,再选中Connections
勾选
Allow remote computers to connect
允许远程计算机连接到Fiddler
注意:
Fiddler Classic listens on port
后面是Fiddler
的默认端口8888
,一般不做修改接着就是为手机配置代理,打卡手机的
设置
,找到WLAN 配置
4. 发送序列化请求
5. 发送上传文件请求
在 Fiddler 组合器的 Parsed 选项卡上,可以通过点击选项卡右上方的上传文件(Upload File)链接创建文件上传,会弹出 Select File for Upload 文件选择窗口。如果请求方法是 PUT,只能选择一个文件;如果请求方法是 POST,可以选择多个文件
选中上传的文件后,Composer 可以创建包含适当格式的请求;当请求执行时,请求体中的所有 @INCLUDE 引用会替换成指定文件的内容。
在 HTTP 中,文件上传是使用 PUT 或 POST 方法执行的。当使用 PUT 方法执行文件上传时,请求体通常包含文件的原始内容,如下图:使用
POST
方法上传通常会使用Content-Type: multipart/form-data
对请求体进行格式化,如下图注意:使用POST
上传方式,需要编辑Name
属性,确保它和服务器的表单字段名称匹配。
6.Fiddler如何定位bug是前后端的问题
查看请求的http状态码是否正确。
- 若抓取到的请求返回的http状态码为404,说明可能是前端JS 提交了错误的地址,也可能是后端服务器没有对应地址的服务;
- 若抓取到的请求返回的http状态码为500,说明是后端服务器内部错误。
- 查看请求的http状态码200但界面提示报错,则具体分析request及response信息,确认是否前端请求传参错误,若前端对应请求地址及传参都正确,则确认后端问题。
抓包分析:
- 看对应的接口有没有触发请求,如果没有请求或请求有问题,那就是前端的BUG。
- 如果前端请求没问题,就看后端返回报文,根据接口文档,返回的数据有误,要具体分析报错的内容。如果是前端传参不对导致的,那就是前端问题,如果传参正确,后端处理不正确,那可能就是后端问题。
- 如果后端响应了且数据和接口文档一致,那就是前端展示的问题。
- 总结,按前端→后端→前端的顺序进行分析。
- 举例:比如一个登录界面,输入用户名密码后点击【登录】发现无响应怎么回事?类似的问题还有,一个支付功能,支付成功后在我的订单里却没有显示。或者一个查询功能,输入条件查询后没有数据展示出来(先排除是否是因为数据库没有数据导致的)。一般都可以套用上面的回答。
详细过程
Chrome浏览器操作Bug复现操作过程,可以在Fiddler看到很多的请求信息
- 排除法:通过host来排除,host这一列,不是我访问网址的域名信息,全部删除
- ctrl+f快速搜索:是你复现问题时,从UI界面输入的数据,那么在此请求中是一定包含
双击搜索的请求,再进行确定
分析请求数据,判断Bug
- fiddler 没有抓到请求信息,可能是前端页面元素没有绑定事件,也有可能是前端发生了JS 错误,一般就是前端的bug 。
- fiddler抓取到的请求但是返回的结果错误,首先确认一下,是否是前端传输的数据是错的,数据错误则是前端的bug ,数据正确,一般就是后端的bug。
- fiddler抓取到的请求,其返回值的HTTP状态码是500(5xx),说明是后端服务器的内部错误,一般就是后端的bug。
- fiddler抓取到的请求,其返回值的HTTP状态码是404(4xx),说明请求错误,如果确定请求地址、参数没有问题,一般就是前端问题。
Android APP抓包详解
Fiddler-IOS APP抓包详解
Fiddler-Willow插件安装