软件测试---Fiddler抓包

一、初识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.com/fiddler
  • Fiddle证书生成器下载地址:http://www.telerik.com/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.cn/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 选项卡是由三个子选项卡组成的:ParsedRawScratchpad 和 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 fiddler.composer.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.com,那么将无法看到 www.hxstrive.com 网站下的数据流。为了查看 hxstrive.com 域名下所有的数据流,需要手动添加通配符 。例如:.hxstrive.com。


在通配符方式下就可以包含如 test.hxstrive.com 和 doc.hxstrive.com 这样的网站。如果你想查看根目录 hxstrive.com下的数据流,可以把通配符改成 *hxstrive.com 的形式 —— 这样就可以包含所有域名以 hxstrive.com 结束的数据流,前面不需要加点。如果有多个 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.com

四、常用功能

1. 抓取指定 IP 地址的包

这里需要使用到过滤器,点击 Filters 按钮

勾选 Use Filters (使用过滤器)

 Host Filter 选择 Show only the following Hosts,在文本框中输入 IP 地址,用 ; 隔开,然后再点击 Changes not yet saved. 保存即可 

如果想要去掉 URL 中包含 cssjsimage 等包,可将 Hide if URL contains 也勾选上

之后抓取的包就只有跟你所设置 IP 相关的包了

2. 抓取 HTTPS 协议的包

默认情况下 Fiddler 是不支持抓取 https 协议的包的,比如我访问百度 https://www.baidu.com/,会话列表是不会有会话的

这个时候需要在 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插件安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值