Fiddler 面板

Fiddler是一个HTTP的调试代理工具,以代理服务器的方式,监听系统的HTTP网络数据流动,还能设置断点,用于抓包。

1 Fiddler

  • Fiddler
    • 官网地址:https://www.telerik.com/fiddler
    • 免费版本:https://blog.csdn.net/g_optimistic/article/details/89931109
    • 主要特征
      • 系统流量捕获、预配置浏览器捕获、流量分析、现代HTTP版本支持、模拟请求和响应。
      • API编写、安全协作、跨平台支持、样式选项(提供现代、直观的UI和一组流行的主题)。
    • 主页说明
      • 菜单栏:File、Edit、Rules、Tools、View、Help。
      • 工具面板:WinConfig、Replay、Go、Stream、Decode、Find、Save、Browse、Clear Cache等快捷按钮。
      • 会话面板:展示捕获到的所有会话,其中包括了sessions的状态码、协议Protocol、Host主机、URL地址等。
      • 监控面板:提供Statistics、Inspectors、AutoResponder等多个选项卡,通过不同的选项卡操作捕获的会话。
      • 状态面板:Capturing(启用禁用抓包)、All Processes(当前正在捕获的进程)、Number of sessions(会话数)等。
      • 命令输入栏:可以结合正则表达式,输入一些命令快速过滤会话列表。

Fiddler-主页说明

1-1 工作原理

  • 工作原理
    • Fiddler本质上是一个Web代理服务器,默认的工作端口是8888,查看方式如下。
    • 菜单栏->Tools->Options->Connections->Fiddler listens on port->8888。
    • Web代理服务器(Proxy Server)是网络的中间实体,位于Web客户端和Web服务器之间,扮演中间人的角色。
    • HTTP的代理服务器即可作为Web服务器为客户端提供服务,又可作为Web客户端,向其他服务器请求数据。
    • 代理服务器的作用:共享网络、提高访问速度(有缓存功能)、突破访问限制、隐藏身份。
    • 打开Fiddler后,会自动设置代理,关闭则自动注销代理,这样就不会影响到其他程序的运行了。
    • 非正常退出时不会自动注销代理,容易造成网页无法访问的情况,可通过重启Fiddler解决问题。
    • 抓包原理
      • 类似于快递代收点,快递员将快递放到代收点。
      • 如果快递没有使用胶带等封口,那么代收点可以任意查看、替换快递中的物品,类似于HTTP。
      • 如果快递使用胶带等封了口,那么代收点就不能随意查看、替换快递中的物品,类似于HTTPS。

Fiddler-工作原理-默认端口

1-2 快速抓包

  • 快速抓包
    • 若Fiddler没有抓到想要的包,逐一排查以下内容。
    • 检查是否开启抓包模式,主页左下角是否有Capturing图标,有则处于抓包中,没有则点击一下开启抓包。
    • 检查访问本地搭建的静态网站地址,是否使用了回路地址localhost或127.0.0.1,如果是则不能成功抓包。
      • 控制面板->Internet选项->连接->局域网设置->代理服务器的高级->例外默认设为<-loopback>
      • 说明在默认的代理设置中,回路地址localhost或127.0.0.1被排除了。
      • 但若搭建的静态网站指定了端口,Fiddler的默认设置中可能并未排除指定端口的流量,因此可正常抓包。
    • 如果还是不能正常抓包,更换不同的浏览器试下。

Fiddler-快速抓包

1-3 HTTP协议

  • HTTP协议
    • 超文本传输协议,Hyper Text Transfer Protocol,一个简单的请求响应协议,基于TCP/IP协议栈的应用层协议。
    • 发展历史:0.9版本(交换信息的无序协议)->1.0版本(1982年)->1.1版本(规定了连接方式和类型)->2.0版本。

(1) 请求报文

  • HTTP的请求报文是指从客户端发送给服务器的报文。
  • 组成
    • 请求行:请求方法 + 空格 + 请求URL + 空格 + HTTP协议版本。
      • 请求方法:提供多种方法(GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT等)。
      • 请求URL:用来告知服务器需要获取的资源,例如“http://detectportal.firefox.com/canonical.html”。
      • HTTP协议版本:用来告知服务器,采用的HTTP协议版本,例如“HTTP/1.1”。
    • 请求头:用于与服务器进行通信、协商,格式为key: value
      • Accept:请求头指定客户端可以接收到的消息内容,例如Accept: text/plain
      • Accept-Language:请求头浏览器可接受语言,例如Accept-Language: en, zh
      • User-Agent:用来标识发起请求的客户端(浏览器、应用程序、爬虫等)身份信息。
      • Content-Type:媒体类型,即数据格式,常见application/json、multipart/form-data等。
      • Accept-Charset:请求头指定浏览器可接受的字符编码,例如Accept-Charset: utf-8
    • 空行:请求头的最后一行,表示请求头结束,接下来为请求数据。
    • 请求体:GET和DELETE方法没有请求体,POST和PUT方法有请求体,数据受Content-Type值的影响。

Fiddler-HTTP协议-请求报文

(2) 响应报文

  • HTTP的响应报文是指客户端发起HTTP请求后,服务器响应给客户端的报文。
  • 组成
    • 状态行:响应行,HTTP协议版本 + 空格 + 状态码 + 空格 + 状态码描述。
      • HTTP协议版本:必须与请求报文的协议版本保持一致。
      • 状态码:HTTP Status Code,用以表示网页服务器超文本传输协议响应状态的3位数字代码。
        • 1XX:信息,服务器收到请求,需请求者继续执行操作。
        • 2XX:成功,操作被成功接收并处理,例如状态码200。
        • 3XX:重定向,需进一步的操作以完成请求,例如304。
        • 4XX:客户端错误,请求包含语法错误或无法完成请求。
        • 5XX:服务器错误,服务器在处理请求过程中发生错误。
      • 状态码描述:200 OK、301 Moved Permanently、302 Found、502 DNS Lookup Failed等。
    • 响应头:在HTTP响应消息中发送的HTTP头字段,包括服务器信息、响应时间等,类似于请求头。
    • 空行:响应头的最后一行,表示响应头结束,接下来为响应数据,与请求报文一致。
    • 响应体:响应数据或响应正文,用于存放需要返回给客户端的数据信息,同请求体。

Fiddler-HTTP协议-响应报文

(3) URL组成

  • URL举例:https://kaifa.baidu.com/searchPage?wd=fiddler&hmsr=aladdin
  • 协议:协议类型,常见的有HTTP、HTTPS、FTP、SFTP、SMTP、POP3等,这里是HTTPS,与IP地址用://分隔。
  • IP地址:要访问的Web服务器的IP地址或主机名称,这里是kaifa.baidu.com,与端口号用:分隔,例如127.0.0.1:99
  • 端口号:标识Web服务器正在监听的端口号,HTTP默认80,HTTPS默认443,这里默认443,与资源路径用/分隔。
  • 资源路径:指定想要访问的资源具体路径,例如IMAGE、CSS、JS等资源,这里是searchPage,与查询参数用?分隔。
  • 查询参数:向Web服务器发送额外的参数信息,键值对组成,这里是wd=fiddler&hmsr=aladdin,参数之间用&分隔。

2 工具面板

  • 工具面板
    • WinConfig、添加注释Comment、数据重放Replay、删除会话Remove、恢复断点执行Go、流模式Stream。
    • 解码Decode、保留会话Keep、任意进程Any Process、快速查找Find、保存请求Save、倒计截图Screenshot。
    • 计时器Timer、浏览器Browse、清除缓存Clear Cache、编解码TextWizard、窗口浮动Tearoff、在线Online。

工具面板

2-1 常用工具

  • 常用工具
    • WinConfig:点击工具面板-WinConfig,打开AppContainer Loopback Exemption Utility弹窗。
    • 显示Windows内置运行的一些应用,默认情况下Fiddler无法抓取到这些内置应用的HTTP通讯包。
    • 通过勾选弹窗对应的内置应用,点击Save Changes按钮,可以解除这些内置应用不能抓包的限制。
    • 快捷键Ctrl + WinConfig可解除所有应用的限制,Exempt All为全选,Exempt None则是全取消。

工具面板-WinConfig

(1) Comment

  • 测试人员在使用Fiddler测试API接口时,可以通过Comment注释功能直接将存在问题的请求添加注释。
  • 当所有接口都测试完成后,将当前所有的session保存为一个*.saz文件,方便发送给开发人员排查问题。
  • 选中存在问题的session会话,点击工具面板-Comment,填写存在的问题备注后,点击OK。

工具面板-Comment

(2) Replay

  • 选中当前存在的一个session会话,点击工具面板-Replay,可以向服务器重新发送一次选中的session请求。
  • 快捷键CTRL + Replay重新发送一次请求,而不包含任何条件的请求头,例如:If-None-Match等。
  • 快捷键Shift + Replay弹窗要求指定每个请求应被重新发送的次数,默认5次,OK后重新发送5次请求。

工具面板-Replay

(3) Remove

  • 点击工具面板-Remove,选对应选项,可删除列表中对应的会话。
  • 选项说明
    • Remove all:删除列表中的所有会话。
    • Images:删除列表中所有图像类会话。
    • CONNECTs:删除列表中所有CONNECT通道。
    • Non-200s:删除列表中所有HTTP响应码非200的会话。
    • Non-Browser:删除列表中所有不是来自浏览器的会话。
    • Complete & Unmarked:删除列表中所有状态为正常结束或异常终止,没被标记且Comments没内容的会话。
    • Duplicate response bodies:删除列表中没有响应体,或者是响应体内容在更早的会话中已经被接收的会话。

工具面板-Remove

(4) Go

  • 点击工具面板-Go,可以恢复执行在Request请求,或Response响应断点处暂停的所有会话。
  • 默认情况下直接点击会恢复所有会话的运行,快捷键Shift + Go仅恢复选中的会话。

(5) Stream

  • 点击工具面板-Stream,开启Streaming Mode流模式。
    • Fiddler一旦从远程服务器拿到了响应,会立即返回响应给客户端,这对于较低网络时间设定来说是非常重要的。
    • 多数浏览器会在尚未完全下载HTML页时进行解析且并行下载所需资源,即使远程服务器还未完全传输该HTML。
    • 访问Internet广播、音乐类站点时,通常使用永不结束的MP3数据流传递给客户端,这类特定场景也适合流模式。
  • 默认情况下,使用的是Buffering Mode缓冲模式。
    • Fiddler会在数据返回客户端之前完全的缓冲响应。
    • 用户有机会在客户端接收到响应之前修改响应内容。
  • 自动流模式
    • Fiddler会自动使用流模式处理video/*audio/*类型的响应,可开启或关闭设置。
    • 菜单栏->Tools->Options->General->勾选Automatically stream audio & video。

工具面板-Stream

(6) Decode

  • 点击工具面板-Decode,直接对所有响应进行解码。
  • 解码没有开启前,Fiddler右侧监控面板中可能提示“Response body is encoded. Click to decode”。
  • 该提示说明当前响应的session会话已被编码,点击该提示信息可对当前响应的session会话进行解码。

工具面板-Decode

(7) Keep

  • Fiddler的Web请求列表非无限,因此提供了保留会话Keep操作,可以让Web请求列表实时保持指定的session会话个数。
  • 点击工具面板-Keep,选All sessions,保持所有的Web请求,选对应个数sessions,则保持对应个数的Web请求。

(8) Any Process

  • 默认情况下Fiddler将抓取所有进程的HTTP请求或响应,这会导致Web请求列表快速刷新,不方便查找所需的Web请求。
  • Any Process可以用来定位抓包,点击工具面板-Any Process,鼠标不放,将十字图标拖拽到指定进程的窗口中,右击则取消。

(9) Find

  • 点击工具面板-Find,支持依据查询条件快速查找会话列表请求,Find Sessions界面如下。
  • Find:输入需要查找的内容,例如baidu.com,查找所有包含baidu.com内容的请求。
  • Options
    • Search:请求和响应、仅请求、仅响应、仅URLs,这四个中匹配条件。
    • Examine:标头和正文、仅标头、仅正文,这三个选项中进行检查匹配。
    • Match case(匹配时区分大小写),Regular Expression(可使用正则匹配)。
    • Search binaries(搜索二进制),Decode compressed content(解码压缩内容)。
    • Search only selected sessions(仅搜索所选的会话),Select matches(搜索匹配)。
    • Unmark old results(取消标记旧结果),Result Highlight(匹配请求使用的高亮色)。

工具面板-Find

2-2 更多工具

  • 更多工具
    • 保存请求Save:点击工具面板-Save,以SAZ文件形式保存请求,除快捷键保存外,还可菜单栏->File->Save中保存。
      • All Sessions:所有抓取到的会话均保存到SAZ文件中。
      • Selected Sessions:将选中的会话保存到SAZ文件中。
        • in ArchiveZip(SAZ归档文件),as Text(保存到文本文件)。
        • as Text(Headers only)(仅保存会话的头部信息到文本文件)。
      • Request:将所有会话的请求报文保存到SAZ文件中。
        • Entire Request(将保存所有会话的请求报文,一个请求保存一个文件)。
        • Request Body(仅保存会话请求的正文部分,若没有正文则给出提示框)。
      • Response:将所有会话的响应报文保存到SAZ文件中。
        • Entire Response(将保存所有会话的响应报文,一个响应保存为一个文件)。
        • Response Body(仅保存会话响应报文的正文部分,若无正文则给出提示框)。
        • and Open as Local File(保存会话的响应报文到文件,然后自动打开该文件)。
    • 倒计截图Screenshot:点击工具面板-Screenshot,支持当前Fiddler所在屏5秒倒计全屏截图,Shift + Screenshot键立即截图。
    • 计时器Timer:点击工具面板-Timer,即开始计时,或停止计时,鼠标右键则可以将计时内容清除。
    • 浏览器Browse:选中一会话点击工具面板-Browse,再任选浏览器打开,不支持多会话同时打开否则about:blank

(1) Clear Cache

  • 点击工具面板-Clear Cache,清除WinINET缓存,快捷键Ctrl + Clear Cache删除持久性Cookies。
  • WinINET缓存,分为文件缓存和URL缓存。
    • Microsoft Windows操作系统中Internet Explorer和一些应用程序如Outlook,使用的一种缓存机制。
    • 可以缓存从Internet或本地网络下载的内容,包括网页、图片、脚本等,用来提高后续访问的速度。
    • WinINET缓存只能缓存HTTP和HTTPS协议的内容,并不支持缓存FTP和Gopher等其他协议的内容。
  • 持久性Cookies
    • 一种Web浏览器中常用的数据存储机制,与浏览器会话无关,可在多个浏览器会话之间保留。
    • 持久性Cookies可以设置过期时间,当Cookie没有过期时,用户下次打开浏览器仍然可以使用。
    • 生命周期取决于Cookie的失效时间和用户浏览器的设置。

工具面板-Clear Cache

(2) TextWizard

  • 用来对文本进行编码和解码,支持多种编码,有Base64、Base64URL、URLEncode、URLDecode、SHA256等。
  • 例如:使用MD5对字符串“Hello Fiddler!”进行编码,点击工具面板-TextWizard,打开TextWizard工具,操作如下。

工具面板-TextWizard

(3) Tearoff

  • 点击工具面板-Tearoff,支持将监控面板以窗口浮动形式进行显示。

工具面板-Tearoff

(4) Online

  • 将鼠标移动到工具面板-Online,将显示当前机器的网络信息,有IP地址、MAC地址等。

工具面板-Online

3 会话面板

  • 会话面板
    • 会话属性
      • #(从1开始生成的请求id)、Result(http响应结果的编码)、Protocol(会话使用的协议,如http、https、ftp)。
      • Host(请求发送到服务器的主机名)、URL(服务器的路径或文件)、Body(响应body的字节数,以bytes为单位)。
      • Caching(响应的有效期或Cache-Control标头的值)、Content-Type(响应Content-Type标头的值)。
      • Process(发起流量的本地Windows进程)、Comments(注释)、Custom(自定义,可设置脚本的文本)。
    • 会话图标
      • 会话面板-会话图标01(请求正发送到服务器)、会话面板-会话图标02(响应正从服务器读取)、会话面板-会话图标03(请求在断点处暂停)、会话面板-会话图标04(响应在断点处暂停)。
      • 会话面板-会话图标05(响应没有body)、会话面板-会话图标06(请求使用post方法)、会话面板-会话图标07(请求使用connect方法,建立一个用于https流量的隧道)。
      • 会话面板-会话图标08(响应是一张图片)、会话面板-会话图标09(响应是一个js脚本)、会话面板-会话图标10(响应是一个css,即叠加样式表)、会话面板-会话图标11(响应是一个xml)。
      • 会话面板-会话图标12(响应是一个json)、会话面板-会话图标13(响应是一种字体)、会话面板-会话图标14(通用的成功响应)、会话面板-会话图标15(响应是使用缓存版本304重定向)。
      • 会话面板-会话图标16(响应是300、301、302、303、307重定向)、会话面板-会话图标17(响应是对客户端凭据的请求)、会话面板-会话图标18(响应是服务器错误)。
      • 会话面板-会话图标19(会话被客户端、Fiddler或服务器中止)、会话面板-会话图标20(响应的Content-Type值为text/html)、会话面板-会话图标21(响应是视频文件)。
      • 会话面板-会话图标22(响应Content-Type为application/octet-stream)、会话面板-会话图标23(请求要求服务器切换协议,服务器已确认切换准备)。

会话面板

4 监控面板

  • 监控面板
    • Statistics(统计选项卡)、Inspectors(检查器选项卡)、AutoResponder(自动响应选项卡)、Composer(组合器)。
    • Fiddler Orchestra Beta(新版新增功能,用于远程抓包)、FiddlerScript(编辑器与脚本库)、Log(日志选项卡)。
    • Filters(过滤器)、TimeLine(时间轴选项卡)。

4-1 Statistics

  • Statistics
    • 显示当前会话的基本信息,最上方显示文本信息,最下方以饼图形式按MIME类型显示流量。
    • 饼图:默认不显示,点Show Chart显示。
      • Collapse Chart支持隐藏饼图,饼图的切片是各个MIME类型及Headers的字节数。
      • Copy this chart可以把饼图作为位图拷贝到剪贴板,进而粘贴到报表或ppt演示中。

监控面板-Statistics

(1) 单会话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Request Count:  1 ------------------------------------ 选中会话的个数
Bytes Sent: 2,047 (headers:2,047; body:0) ------ HTTP请求头和请求体中向外发送的字节总数
Bytes Received: 96,052 (headers:794; body:95,258) --- HTTP请求头和请求体中接收到的所有字节数

ACTUAL PERFORMANCE ----------------------------------- 请求实际执行情况
--------------
ClientConnected: 11:35:43.234
ClientBeginRequest: 11:35:43.346
GotRequestHeaders: 11:35:43.346
ClientDoneRequest: 11:35:43.346
Determine Gateway: 0ms
DNS Lookup: 0ms ------------ 选中会话解析DNS所花费的时间的总和,DNS缓存或所有连接都已建立,则不需要DNS解析
TCP/IP Connect: 0ms ------------ 选中会话建立TCP/IP连接所花费的时间总和,所有请求都已建立连接,则不需要TCP/IP连接
HTTPS Handshake: 0ms ------------ 选中会话在HTTPS握手上所花费的时间总和
ServerConnected: 11:35:43.262 --- 所有会话都是HTTP,不需解密,或都发生在已建立安全信任的连接上,则不存在HTTPS握手
FiddlerBeginRequest: 11:35:43.346
ServerGotRequest: 11:35:43.347
ServerBeginResponse: 11:35:43.366
GotResponseHeaders: 11:35:43.366
ServerDoneResponse: 11:35:43.421
ClientBeginResponse: 11:35:43.421
ClientDoneResponse: 11:35:43.421

Overall Elapsed: 0:00:00.074 ---------------------- 已用总时间

RESPONSE BYTES (by Content-Type) --------------------- 响应字节数(按Content-Type分组统计)
--------------
text/html: 95,258
~headers~: 794


ESTIMATED WORLDWIDE PERFORMANCE ---------------------- 选中的流量在不同地区和连接方式下所需时间的初步估计
--------------
The following are VERY rough estimates of download times when hitting servers based in Seattle.

US West Coast (Modem - 6KB/sec) ---------------------- 该值是根据选中会话的个数和大小计算的
RTT: 0.10s
Elapsed: 16.10s

Japan / Northern Europe (Modem) ---------------------- 实际网络性能受多因素影响,因而该值可能不准确
RTT: 0.15s
Elapsed: 16.15s

China (Modem)
RTT: 0.45s
Elapsed: 16.45s

US West Coast (DSL - 30KB/sec)
RTT: 0.10s
Elapsed: 3.10s

Japan / Northern Europe (DSL)
RTT: 0.15s
Elapsed: 3.15s

China (DSL)
RTT: 0.45s
Elapsed: 3.45s

________________
Learn more about HTTP performance at http://fiddler2.com/r/?HTTPPERF

(2) 单通道

  • 单个CONNECT通道,会显示在该通道上发送和接收的字节数,除非配置为HTTPS加密方式。
  • 配置为HTTPS加密方式的情况下,需在Web会话列表已解密的HTTPS会话中查看字节数信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Request Count:  7 ------------------------------------ 选中的请求数
Unique Hosts: 5 ------------------------------------ 流量流向的独立目标主机数,若都发送到相同服务器上,则不显示
Bytes Sent: 5,745 (headers:5,513; body:232) ------ HTTP请求头和请求体中向外发送的字节总数
Bytes Received: 7,470 (headers:2,319; body:5,151) ---- HTTP请求头和请求体中接收到的所有字节数

ACTUAL PERFORMANCE ----------------------------------- 实际执行情况
--------------
Requests started at: 14:55:26.437 ----------- Fiddler接收到的第一个请求的第一个字节时间点
Responses completed at: 14:55:44.471 ----------- Fiddler发送到客户端的最后一个响应的最后一个字节时间点
Sequence (clock) duration: 00:00:18.033 ----------- 第一个请求开始到最后一个响应结束之间的间隔时间
Aggregate Session duration: 00:00:00.184 ----------- 所有选中的会话从请求到响应之间的时间的和
DNS Lookup time: 1ms -------------------- 会话通常是并行运行的,Aggregate结果可能比Sequence时间长
TCP/IP Connect duration: 21ms ------------------- 会话从开始到结束之间若包含空闲时间,Aggregate也可能比Sequence时间短
HTTPS Handshake duration: 23ms

RESPONSE CODES --------------------------------------- 选中会话中各个HTTP响应码的计数
--------------
HTTP/200: 6
HTTP/204: 1

RESPONSE BYTES (by Content-Type) --------------------- 响应字节数(按Content-Type分组统计)
--------------
image/png: 4,868
~headers~: 2,319
image/svg+xml: 184
image/gif: 86
application/json: 13

REQUESTS PER HOST
--------------
localhost: 2
pub.idqqimg.com: 2
docs.qq.com: 1
aegis.qq.com: 1
report.idqqimg.com: 1


ESTIMATED WORLDWIDE PERFORMANCE ---------------------- 选中的流量在不同地区和连接方式下所需时间的初步估计
--------------
The following are VERY rough estimates of download times when hitting servers based in Seattle.

US West Coast (Modem - 6KB/sec) ---------------------- 该值是根据选中会话的个数和大小计算的
RTT: 0.70s
Elapsed: 2.70s

Japan / Northern Europe (Modem) ---------------------- 实际网络性能受多因素影响,因而该值可能不准确
RTT: 1.05s
Elapsed: 3.05s

China (Modem)
RTT: 3.15s
Elapsed: 5.15s

US West Coast (DSL - 30KB/sec)
RTT: 0.70s
Elapsed: 0.70s

Japan / Northern Europe (DSL)
RTT: 1.05s
Elapsed: 1.05s

China (DSL)
RTT: 3.15s
Elapsed: 3.15s

________________
Learn more about HTTP performance at http://fiddler2.com/r/?HTTPPERF

4-2 Inspectors

  • Inspectors
    • 用于显示Web会话列表中选定会话的请求和响应信息,位于监控面板选项卡处,也有独立的Inspect Session窗口。
    • Inspect Session窗口可以在会话面板中,选中需要打开请求或响应信息的会话,鼠标右键Inspect in New Window。
    • Fiddler会根据每个请求和响应的类型,自动选择合适的Inspectors视图,例如image/*类型显示ImageView视图。
    • 右击请求或响应的Inspector选项卡,会显示三个选项菜单。
      • Inspector Properties:显示Inspector提供的自身信息。
      • Copy as Image:将当前Inspector复制成图片,粘贴到其他地方使用。
      • Hide Inspector:从Inspectors选项卡中隐藏该Inspector,支持恢复。
    • Inspectors默认情况下是只读模式Readonly,除非该会话停止在某个断点处。
    • 只要当前会话处于未锁定状态,就可以选中后鼠标右键Unlock For Editing进行编辑,编辑模式是白色背景显示。
    • 默认的只读模式是淡蓝色背景,菜单栏->Tools->Options->Appearance->Set Readonly Color可更改背景色。

监控面板-Inspectors

(1) Inspector Properties

监控面板-Inspectors-Inspector Properties

(2) Hide Inspector

监控面板-Inspectors-Hide Inspector

(3) Hide Inspector恢复

  • 菜单栏->View->Tabs->Preferences>fiddler.inspectors.hidelist的value改为True或False,保存后重启。

监控面板-Inspectors-Hide Inspector恢复

4-3 AutoResponder

  • AutoResponder
    • 支持创建规则,可在响应请求时自动触发,常见例子是返回之前捕捉的响应,而不需要访问服务器。
    • Enable rules:用来控制是否激活自动响应选项卡。
    • Unmatched requests passthrough:用来控制会话不匹配给定规则时会发生的情况。
      • 如果勾选,则不匹配的请求会正常发送到服务器。
      • 如果不勾选,那么Fiddler会为所有与该规则完全不匹配的HTTP请求,生成响应404 Not Found。
      • 若客户端发送条件请求包含If-None-Match或If-Modified-Since,返回响应304 Not Modified。
    • Enable Latency
      • 用来控制匹配某个规则的请求是立即执行,还是延迟Latency字段中所指定的毫秒数。
      • 不勾选Latency字段就不显示,勾选可准确地模拟服务器实际响应,取消可提升性能。
    • Add Rule:点击该按钮添加一个新的AutoResponder规则。
    • Import
      • 支持导入SAZ文件,导入的每个会话会被用于规则列表生成新规则。
      • 还可以导入FARX文件,包含从AutoResponder选项卡中导出的规则。
    • 中间是规则列表
      • If request matches:匹配条件,用于判断接收到的请求是否匹配该规则,复选框控制规则是否选中。
      • then respond with:规则匹配时所要采取的操作,即返回哪些数据给请求,可指定本地文件或其他。
      • Latency:勾选Enable Latency时才出现,用来说明规则的延迟时间。

监控面板-AutoResponder

(1) Rule Editor

  • 底部的Rule Editor用来调整规则的匹配条件和返回,Test支持根据选中的样本URI测试匹配条件。
    • URL Pattern:设置匹配公式。
    • Test URL:设置测试的网址。
    • Save Changes:将条件替换为Rule Editor的第一行匹配条件内容。
  • Match only once表示只匹配一次,Save为更改规则后,更新规则内容。
  • Rule Editor第二行,设置返回。
    • 200_FiddlerGif.dat(返回一个gif图片给客户端)、200_SimpleHTML.dat(返回一个简单的HTML报文)。
    • 200_TransPixel.dat(返回一个内置的位图)、204_NoContent.dat(返回状态码为204且无内容的报文)。
    • 302_Redirect.dat(即将重定向到Fiddler官网)、303_RedirectWithGet.dat(即将重定向到Fiddler官网)。
    • 304_NotModified.dat(返回状态码为304,且长度为0的报文)。
    • 307_RedirectWithMethod.dat(返回状态码为307的响应报文)。
    • 401_AuthBasic.dat(返回状态码为401,且基础权限验证失败的响应报文,用户没有访问权限,需身份认证)。
    • 401_AuthDigest.dat(返回状态码为401,且摘要权限验证失败的响应报文)。
    • 403_AuthDeny.dat(返回状态码403,没有访问权限错误信息的响应报文)。
    • 404_Plain.dat(返回HTML文件不存在的响应报文)。
    • 407_ProxyAuthBasic.dat(返回一个代理服务未通过基础权限认证的响应报文)。
    • 502_Unreachable.dat(返回一个状态码为502,并且服务器不可用的响应报文)。
    • *bpu(为当前匹配的请求添加请求断点)。
    • *bpafter(为当前匹配的请求添加响应断点)、*exit(停止正在处理的规则)。
    • *drop(不发送响应,马上关闭客户端连接,TCP/I层角度看,该连接是优雅断开的,向客户端返回FIN)。
    • *reset(不发送响应,马上关闭客户端连接,TCP/I层角度看,该连接是粗暴断开的,向客户端返回RST)。
    • *delay:100(为当前匹配的请求添加100毫秒的延迟,支持依据需求,将该延迟改为想要延迟的具体时间)。
    • *ReplyWithTunnel(使用隧道进行回复)。
    • *CORSPreflightAllow
      • 可确保服务器对CORS标准知情,保护不支持CORS的旧服务器。
      • 借助Access-Control-Allow-Origin响应头字段允许跨域AJAX。
      • 非简单请求CORS机制跨域会首先进行preflight(Options请求),该请求成功后才发送真正的请求。
    • *flag:ui-backcolor=#FFD700(将当前匹配的请求在Web请求列表中添加背景颜色,默认黄色背景)。
    • *header:HeaderName=NewValue(添加头字段,字段名HeaderName,字段值NewValue,可依据需求设置)。
    • *redir:http://www.example.com(返回指向目标URL的307重定向响应,前缀确保客户端知道请求发送到哪)。
    • *script:FiddlerScriptFunctionName(为匹配的请求调用FiddlerScript中指定的函数)。
    • http://www.example.com(将该地址的响应作为客户端响应,有效地把请求重定向到指定URL)。
    • Create New Response…(输入文件名,在Fiddler指定的目录下查找该文件信息)。
    • Find a file…(选择本地一个文件,例如文本、图片等,作为响应返回给客户端)。

监控面板-AutoResponder-Rule Editor

(2) Rule右键菜单

  • Remote(移除规则)、Promote(将选中的规则向上移动)、Demote(将选中的规则向下移动)。
  • Clone(克隆一个选中的规则到规则框中)、Set Latency(设置响应的延迟时间,单位为毫秒)。
  • Set Comments(设置注释来提示当前规则的作用)、Edit Response(编辑当前规则设置的响应文件)。
  • Generate File(生成响应文件)、Edit File With(将匹配到的响应保存为本地文件并用编辑器打开)。
  • Open Url(使用默认的网页浏览器打开匹配条件中的网址)、Find(规则框中寻找字符串,高亮显示)。
  • Export All(导出当前规则为farx的文件)。

监控面板-AutoResponder-Rule右键菜单

(3) 访问新浪实战

  • 建立一个规则,访问新浪官网,使其返回的是百度搜索页面。
    • 访问百度,复制源码保存为本地baidu.html文件,浏览器事先打开新浪网,确保Fiddler正常抓包。
    • 会话面板选中新浪网的请求会话->AutoResponder->Add Rule->Rule Editor第二行Find a File。
    • 选择已保存到本地的baidu.html文件->勾选Enable rules->浏览器再次请求新浪网页面进行查看。

监控面板-AutoResponder-访问新浪实战

4-4 Composer

  • Composer
    • 支持手动构建和发送HTTP、HTTPS和FTP请求,点击Execute按钮将请求发送到服务器端。
    • 可以从Web会话列表中拖拽会话到Composer选项卡中,将该Session的请求复制到用户界面。

(1) Parsed

  • 支持为每个请求组件使用独立的输入框构建请求。
    • HTTP方法:GET、POST、PUT、HEAD、TRACE、DELETE等。
    • 请求的绝对URL,必须以http://https://ftp://开头。
    • 指定请求的HTTP协议版本,通常是HTTP/1.1。
  • 若当前的请求方法不支持请求体,例如GET方法,则在请求体输入框输入文本时会显示红色背景。

监控面板-Composer-Parsed

(2) Upload file

  • Parsed选项卡上有一个Upload file上传文件按钮。
  • 请求方法是PUT只能选一个文件,请求方法是POST则可以选多个文件。
  • 上传文件后(指定PUT或POST),Composer可创建包含适当格式的请求。
    • 使用PUT方法执行文件上传时,请求体通常包含文件的原始内容。
    • 使用POST方法上传时,通常会用Content-Type值格式化请求体。
  • 请求执行时,请求体中的所有@INCLUDE引用会替换成指定文件的内容。

监控面板-Composer-Upload file

(3) Raw

  • 提供了简单的文本框,可以在该文本框中输入合适的HTTP请求。
  • 如果输入的请求文本格式不对,点击Execute按钮不会发起请求。
  • Raw选项卡使用较少,多以Parsed选项卡为准。

监控面板-Composer-Raw

(4) Scratchpad

  • 用于存储请求集合,如果要发出请求,选择对应的请求文本,并点击Execute按钮执行即可。

监控面板-Composer-Scratchpad

(5) Options

  • Inspect Session:勾选该项,点击Execute按钮执行请求时会跳转到Inspectors选项卡,可查看请求结果。
  • Fix Content- Length header
    • 控制Composer是否自动添加或修改Content-Length请求头,表示请求体的大小。
    • 在多数情况下,缺少适当的Content-Length请求会Hang住或导致HTTP响应出错。
  • Follow Redirects
    • 控制Composer是否自动使用响应的Location头,遵循HTTP/3xx重定向。
    • 如果勾选该项,Composer选项卡在失败之前最多会执行10次3xx重定向。
  • Automatically Authenticate
    • 控制Composer是否自动响应服务器的HTTP/401或HTTP/407认证需求。
    • 如果勾选该项,会使用Fiddler所运行账户的Windows证书自动响应这些问题。
    • 且需要提供不同的证书集,设置Preferences的fiddler.composer.autoauth值。
    • 若服务器需要的证书和提供方的证书不同,请求会失败,通常返回响应HTTP/403。
  • Tear off
    • 从监控面板窗口删除Composer选项卡,并将其作为独立的悬浮窗口打开查看。
    • 勾选Inspect Session,点击按钮,支持同时查看Composer和Inspector选项卡。

监控面板-Composer-Options

(6) 序列化请求

  • 模拟某些场景,发送多个请求,这些请求除了某个有序的数字外,其他完全相同。
  • 例如Flask实现的一个简单网页展示图片信息程序,图片名称基本一致,序号不同。
  • 利用Fiddler的发送序列化请求,逐一访问image-001.png到image-007.png的图片。
    • 启动Flask小程序,在Composer中输入URL地址,序号部分使用#号代替。
    • 本地小程序,URL地址为:http://127.0.0.1:5000/image/image-#.png
    • 点击Execute按钮执行请求,此时Fiddler要求输入序号开始值,输入001。
    • OK->再输入序号结束值007->OK->Fiddler会自动计算序列且发起请求。

监控面板-Composer-序列化请求

✧ 程序目录

1
2
3
4
5
6
7
8
9
10
11
12
- /static
- /images
- image-001.png
- image-002.png
- image-003.png
- image-004.png
- image-005.png
- image-006.png
- image-007.png
- /templates
- image.html
- image.py # 命令窗口执行python image.py

✧ image.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import os
import datetime
from flask import Flask, render_template, url_for, send_file

app = Flask(__name__)


def get_metadata(file_path):
size = os.path.getsize(file_path) # 获取文件大小,单位字节
mtime = os.path.getmtime(file_path) # 获取文件最近修改时间
modified_time = datetime.datetime.fromtimestamp(mtime).strftime('%Y-%m-%d %H:%M:%S')
ctime = os.path.getctime(file_path) # 获取文件创建时间
created_time = datetime.datetime.fromtimestamp(ctime).strftime('%Y-%m-%d %H:%M:%S')
return size, modified_time, created_time


@app.route('/')
def index():
image_names = ['image-001.png', 'image-002.png', 'image-003.png',
'image-004.png', 'image-005.png', 'image-006.png',
'image-007.png']
image_info_list = [] # 获取所有图片文件的元数据
for image_name in image_names:
file_path = os.path.join(app.static_folder, 'images', image_name)
size, modified_time, created_time = get_metadata(file_path)
show_image = url_for('show_image', image_name=image_name)
image_info_list.append({'name': image_name,
'modified_time': modified_time,
'created_time': created_time,
'size': size,
'show_image': show_image})
return render_template('image.html', image_info_list=image_info_list)


@app.route('/image/<string:image_name>')
def show_image(image_name):
current_dir = os.path.dirname(os.path.abspath(__file__)) # 确定要下载的文件路径
file_path = current_dir + '\\static\\images\\' + image_name
print(file_path)

if os.path.isfile(file_path): # 如果该文件存在,则返回它
_, ext = os.path.splitext(file_path) # 确定文件的扩展名和MIME类型
mime_type = {
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.gif': 'image/gif'
}.get(ext.lower(), 'application/octet-stream')
return send_file(file_path, as_attachment=False, mimetype=mime_type)
else: # 否则返回一个错误信息
return '<center>Error! The requested file does not exist.</center>'


if __name__ == '__main__':
app.run(debug=True)

✧ image.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html>
<head>
<title>图片展示</title>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css">
<link rel="stylesheet" href="{{ url_for('static', filename='css/gallery.css') }}">
</head>
<body>
<h1 class="text-center">Image Gallery</h1>
<div class="container">
<table class="table table-striped">
<thead>
<tr class="text-center">
<th>Image Name</th>
<th>Last Modified Time</th>
<th>Created Time</th>
<th>File Size</th>
<th>Show Link</th>
</tr>
</thead>
<tbody>
{% for image_info in image_info_list %}
<tr class="text-center">
<td>{{ image_info['name'] }}</td>
<td>{{ image_info['modified_time'] }}</td>
<td>{{ image_info['created_time'] }}</td>
<td>{{ image_info['size'] }} bytes</td>
<td>
<a href="{{ url_for('show_image', image_name=image_info['name']) }}">Show</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>

4-5 Orchestra

  • Orchestra
    • 抓取APP流量原理:APP连接到Orchestra服务后,Orchestra正常转发流量的同时再复制一份流量给Fiddler。
    • Fiddler->Orchestra->Download Fiddler Orchestra client for Windows, Mac and Linux->解压文件。
    • 在当前解压的目录中,鼠标右键Git Bash Here->输入dotnet FiddlerOrchestra.Client.NetCore.dll回车。
    • 若显示以下内容,则下载安装.NET Core 2.0->另起一个Git Bash Here,输入命令回车,启动Orchestra客户端。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ dotnet FiddlerOrchestra.Client.NetCore.dll                  # 缺少.NET Core 2.0
It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '2.0.0' (x64) was not found.
- The following frameworks were found:
6.0.6 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
You can resolve the problem by installing the specified framework and/or SDK.
The specified framework can be found at:
- https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=2.0.0
&arch=x64&rid=win10-x64

# 正常启动Fiddler Orchestra Beta客户端,具体操作可以参考[https://zhuanlan.zhihu.com/p/551401338]
$ dotnet FiddlerOrchestra.Client.NetCore.dll # 启动后不关,后面配置Orchestra有用
Hosting environment: Production
Content root path: D:\Program\FiddlerOrchestra
Now listening on: http://localhost:8800
Application started. Press Ctrl+C to shut down.
...

(1) 连接客户端

  • 管理员身份运行Fiddler->Orchestra->点Start启动监听->配置Orchestra客户端,访问http://localhost:8800
  • Orchestra Connection->IP Address为127.0.0.1,Port为3636,Private key即Fiddler中的密钥->点击Connect。
  • Fiddler与Orchestra客户端连接成功,则Private key无法修改,Connect变Disconnect,Orchestra界面显示连接详细。

监控面板-Orchestra-连接客户端

(2) 配置证书下载

  • http://localhost:8800->HTTPS Root Certificate->Generate root certificate as PKCS#12 file->创建及下载证书。
  • 将下载的证书fiddler-orchestra-root-certificate.p12存放到指定位置->HTTPS Root Certificate页面进行加载。
  • 点击Load root certificate from PKCS#12 file->页面的顶部将显示Success:HTTPS root certificate is loaded

监控面板-Orchestra-配置证书下载

(3) 启动全部服务

  • 启动全部服务:Proxy->勾选Allow remote clients to connect->Start。
  • HTTP Reverse Proxy->勾选Allow remote clients to connect->Start。
  • HTTPS Reverse Proxy->File path输入证书fiddler-orchestra-root-certificate.p12的路径->Start。
  • 常用的代理服务器
    • Proxy
      • 正向代理,是客户端与目标服务器之间的中间代理服务器。
      • 将客户端请求转发到目标服务器,并将响应返回给客户端。
      • 例如:某些国家因特网接入受限,或被限制访问某些网站时,使用正向代理绕过封锁。
    • HTTP Reverse Proxy
      • 反向代理,是服务器端的代理服务器。
      • 将客户端请求转发到内部网络的后端服务器,然后将响应返回给客户端。
      • 隐藏在服务器端,由服务器的管理员配置,客户端无法感知代理的存在。
      • HTTP反向代理常用于负载均衡、缓存加速和安全防护等方面。
    • HTTPS Reverse Proxy
      • SSL/TLS反向代理,是一种基于加密的反向代理,用于安全传输Web页面和其他数据。
      • 与HTTP反向代理类似,但在连接客户端和服务器之间的通信时采用SSL/TLS协议加密。
      • 有效地保护Web接口的安全性,避免敏感信息,如用户名和密码等,在传输过程中被窃取和篡改。

(4) 与手机端连接

  • 点击Fiddler Orchestra Beta选项卡中的Download Fiddler Orchestra client for Android,下载安装到手机端。
  • Fiddler->菜单栏->Tools->Options->Connections选项中的Allow remote computers to connect保持勾选。
  • Fiddler Orchestra Beta客户端与手机端建立连接,要求客户端和手机端在同一局域网内(使用相同WiFi网络)。
  • 打开手机端的Fiddler Orchestra Beta客户端,在Orchestra Connection页面分别输入IP地址、端口号、Key值。
    • IP地址:Fiddler的工具面板Online查看到的IP地址,也可命令窗口输入ipconfig查看IPv4地址。
    • 端口号:这里应该是指http://localhost:8800的Proxy页面设置的Listen on port,默认是8866。
    • Key值
      • 电脑端的Fiddler Orchestra Beta客户端中生成的SSL密钥(具体在哪没找到,与手机端连接失败)。
      • Fiddler->菜单栏->Tools->Options->HTTPS->certificates generated by CertEnroll engine。
  • 手机端与电脑端建立连接,除了使用USB数据线进行操作,还支持无线连接(保证两端处于同一WiFi环境下)。

4-6 FiddlerScript

  • FiddlerScript
    • Fiddler上的一个addon插件,或说是一个hook文件,实现了Go to的九大事件。
    • 很多设置菜单,也是在这个脚本中编写的,支持自定义修改,例如User-Agents。

监控面板-FiddlerScript

(1) 语言模式

  • FiddlerScript有C#和JScript.NET这两种开发语言模式,可依据偏好设置。
  • 切换语言:菜单栏->Tools->Options->Scripting->Language一栏可选。
  • 对应Fiddler安装目录Scripts文件夹中的SampleRules.cs(C#)和SampleRules.js(JScript.NET)。

监控面板-FiddlerScript-语言模式

(2) 编辑模式

  • 监控面板的FiddlerScript选项卡,支持文本编辑,Save Script保存文本。
  • 菜单栏->Rules->Customize Rules->弹窗Fiddler ScriptEditor进行编辑。
  • 若脚本写错,或改乱无法正确保存,可在菜单栏->Tools->Reset Script重置脚本内容。

监控面板-FiddlerScript-编辑模式

4-7 Log

  • Log
    • Fiddler的Log选项卡收集日志消息字符串,这些字符串由扩展、FiddlerScript或Fiddler本身生成。
    • 记录应用事件(保存为SAZ文件),以及系统事件的响应通知,例如:系统的网络连接丢失或恢复。
    • 在Log选项卡页面,鼠标右键显示的一些命令说明。
      • Copy:把选中的文本复制到剪贴板。
      • Send to Session List:将事件日志作为会话保存到Web会话列表。
      • Save to File:将当前日志保存到磁盘文件中,以纯文本(.txt)或富文本(.rtf)格式保存。
      • Clear:清空Log选项卡中的所有文本。
    • Log选项卡支持简单的宏命令,可以从QuickExec命令输入栏中调用这些命令。
      • log @Log.Clear:清空日志。
      • log @Log.Save:在Web会话列表中生成新的会话,响应体包含Log选项卡的文本内容。
      • log "@Log.Export(\"filename\")":将Log选项卡文本保存到系统桌面的.rtf文件中。

监控面板-Log

4-8 Filters

  • Filters
    • 过滤器提供了非常方便地将简单的过滤规则,应用到正在捕捉的数据会话流上的方法。
    • Filters上的所有操作都可以在FiddlerScript中模拟,简单任务直接使用过滤满足即可。
    • 功能包括:隐藏/显示会话、添加会话标识、断点调试、阻断发送请求、修改数据头等。
    • 过滤器还可以为隐藏的会话提供代理功能,即使在Web会话列表中并没有显示这些会话。
    • Use Filters:是否开启过滤器。
    • Actions:支持把当前选中的过滤器作为过滤集,并对之前捕捉到的数据流应用当前过滤规则。
      • Run Filterset now:立即运行过滤器设置。
      • Load Filterset:加载过滤器设置。
      • Save Filterset:保存过滤器设置。
    • 修改过滤器后,需执行Actions的Run Filterset now按钮,使修改后的过滤器配置立即生效。

监控面板-Filters

(1) Hosts

  • 区域过滤(Zone Filter)
    • Show only Intranet Hosts:只列出属于局域网的会话。
    • Show only Internet Hosts:只列出属于互联网的会话。
  • 主机过滤(Host Filter)
    • Hide the following Hosts:隐藏Hosts输入框输入的主机。
    • Show only the following Hosts:仅显示Hosts输入框输入的主机。
    • Flag the following Hosts:在Web会话列表中加粗显示Hosts输入框输入的主机所有会话。
  • Hosts输入框不会通过通配符自动匹配子域名,若设置了Show only the following Hosts
  • 并且列表中只有xxx.com,则无法看到www.xxx.com网站下的数据流,需改成*.xxx.com
  • 若想看根目录xxx.com下的数据流,将通配符改成*xxx.com的形式,多个host用分号隔开。

监控面板-Filters-Hosts

(2) Client Process

  • 客户端进程用于控制进程的数据流,应用程序只有和Fiddler运行在相同的主机时才能做出判断。
  • Show only traffic from:只显示选中进程下的数据流(注意:下拉列表包含了当前系统中,正在运行的所有进程)。
  • Show only Internet Explorer:只显示进程名以IE开头,或请求的User-Agent包含compatible; MSIE的数据流。
  • Hide traffic from Service Host:隐藏来自进程svchost.exe的数据流,该进程是一个系统进程。

监控面板-Filters-Client Process

(3) Request Headers

  • Show only if URL contains:支持基于URL隐藏请求,仅显示感兴趣的请求。
  • Hide if URL contains
    • 支持基于URL显示请求,仅隐藏某些请求,可以使用前缀EXACT来限定大小写敏感。
    • EXACT:www.example.com/apiREGEX:(?insx).*\.(gif|png|jpg)$只显示图片。
  • Flag requests with headers:支持指定HTTP请求头名称,如果会话列表中存在,则加粗显示。
  • Delete request headers:支持指定HTTP请求头名称,如果包含该请求头,那么删除该请求头。
  • Set request header:支持创建指定名称和取值的HTTP请求头,或将请求头更新为指定的取值。

监控面板-Filters-Request Headers

(4) Breakpoints

  • 断点选项框支持对包含给定属性的请求或响应设置断点。
  • Break request on POST:为所有的POST请求设置断点。
  • Break request on GET with query string:为所有方法为GET且URL包含查询串的请求设置断点。
  • Break on XMLHttpRequest:对所有能够确定是通过XMLHttpRequest对象发送的请求设置断点。
    • 通过查找请求头是否为X-Requested-With来实现的,该请求头由jQuery框架添加。
    • 还会检查请求头是否为X-Download-Initiator,IE10及更高版本可配置该请求头。
  • Break response on Content-Type:为所有响应头Content-Type中包含指定文本的响应设置断点。

监控面板-Filters-Breakpoints

(5) Response Status Code

  • Hide success(2xx):隐藏状态码在200到299之间的响应。
  • Hide non-2xx:指隐藏状态码不在200到299之间的响应。
  • Hide Authentication demands(401,407):隐藏状态码为401,和407的响应。
  • Hide redirects(300,301,302,303,307):隐藏对请求进行重定向的响应。
  • Hide Not Modified(304):隐藏请求中状态码为304的响应,表示客户端缓存的实体是有效的。

监控面板-Filters-Response Status Code

(6) Response Type and Size

  • 下拉框选项
    • Show all Content-Types(显示所有响应,不过滤)、Show only IMAGE/*(只显示图片类型的响应)。
    • Show only HTML(只显示HTML文档的响应)、Show only TEXT/CSS(只显示CSS层叠样式表的响应)。
    • Show only SCRIPTS(只显示脚本类型的响应)、Show only XML(只显示XML类型的响应)。
    • Show only JSON(只显示JSON类型的响应)、Hide IMAGE/*(代表只隐藏图片类型的响应)。
  • 其他勾选框
    • Hide smaller than:隐藏响应体小于指定字节数的响应。
    • Hide larger than:隐藏响应体大于指定字节数的响应。
    • Time HeatMap:基于服务器返回给定响应所需的时间为每个会话设置背景颜色。
    • Block scriptfile:如果返回的响应头指定Content-Type为脚本,返回404响应。
    • Block imagefile:如果返回的响应头指定Content-Type为图像,返回404响应。
    • Block SWF file:如果返回的响应头指定Content-Type为Flash,返回404响应(即application/x-shockwave-flash)。
    • Block CSS file:如果返回的响应头指定Content-Type为CSS,返回404响应。

监控面板-Filters-Response Type and Size

(7) Response Headers

  • Flag responses that set cookies:以粗体显示所有响应头包含Set-Cookie的响应。
  • Flag responses with headers:支持指定HTTP响应头名称,如果响应中该HTTP头存在,以粗体显示。
  • Delete response headers:支持指定HTTP响应头名称,如果存在该响应头名称,会从响应头中删去。
  • Set response header:支持创建或更新HTTP响应头,可自定义设置取值。

监控面板-Filters-Response Headers

4-9 TimeLine

  • TimeLine
    • 支持使用瀑布模型查看选中的会话,对于性能分析和理解请求之间的关联很有帮助。
    • 主要内容即数据流视图,上方显示标题,显示传输时间轴模式(Transfer Timeline)。
    • 右上方有一个Help帮助链接,点击该链接可在浏览器中打开关于该功能的帮助信息。
    • 鼠标右键选项
      • AutoScale Chart:自动缩放图表,水平自适应调节图形宽度。
      • Copy Chart:复制图表,支持将图形以位图格式拷贝到剪贴板。
      • Mode:控制图形显示模式。
        • Timeline:时间轴模式,通过时间轴线条显示每个会话,用彩色条表示时间段。
        • Client Pipe Map:客户端管道模式。
          • 显示每个时间轴的客户端进程和Fiddler之间的连接。
          • 多个Session之间重用的连接将会以多种彩色条显示。
        • Server Pipe Map:服务端管道模式。
          • 显示每个时间轴的Fiddler和上游服务器之间的连接。
          • 多个Session之间重用的连接将会以多种彩色条显示。
    • 客户端和服务端管道模式显示客户端和服务器之间如何复用连接,有助于判断性能瓶颈。
    • 时间轴选项卡不显示任何CONNECT通道,即在会话列表中Host显示为Tunnel to的会话。
    • 因为通道的数据流可能是模糊的,也可能是由一个或多个解密的HTTPS Web会话项跟踪。

监控面板-TimeLine-传输时间轴

(1) 传输时间轴

  • 每行显示一个会话,最左边是文件名,将鼠标放到任意行上方,底部的状态栏将显示该项的更多信息。
  • 双击某行会跳转到Inspectors选项卡,显示该会话的详细信息。
  • 如果双击的同时按SHIFT键,会在新的窗口显示该会话的信息。
  • 条形栏颜色由响应的MIME类型决定:图像浅绿色,JavaScript深绿色,CSS紫色,其他类型蓝色。
  • 传输条形栏在客户端开始向Fiddler发送请求时开始绘制,当发送回客户端的响应收到后完成绘制。
  • 条形栏中黑色竖线表示接收到服务端响应的第一个字节时间,前面的两个小圆圈表示会话是否是复用连接进行传输。
    • 绿色的圆圈表示连接是复用的,红色的圆圈表示连接是新创建的。
    • 上方的圆圈表示客户端到Fiddler之间的连接,而下方的圆圈表示Fiddler到服务器之间的连接。
  • 条形栏用阴影线表示缓存模式,HTTP响应被Fiddler缓存,会话在完成前不会开始下载图片,缓存将改变瀑布模型。
  • 条形栏用平滑线表示流模式,Fiddler将数据流式地转发给客户端,Stream模式每次下载的数据将直接返回给客户端。
  • 条形栏后面的图标说明
    • 红色X图标:表示服务器发送了请求头Connection: close
    • 对于HTTP/1.0类型的响应,指发送请求头Connection: Keep-Alive失败,阻止后续请求重用该连接。
    • 灰色箭头:表示服务器响应是状态码302重定向。
    • 红色感叹号:表示服务器返回4xx,或5xx错误码。

✧ 缓存模式

监控面板-TimeLine-传输时间轴-缓存模式

✧ 流模式

监控面板-TimeLine-传输时间轴-流模式

✧ 图标说明

监控面板-TimeLine-传输时间轴-图标说明

(2) 客户端管道

  • Client Pipe Map模式下,显示每个时间轴的客户端进程和Fiddler之间的连接。
  • 左侧显示连接标识符,包括:进程名称、进程ID、客户端的端口号。
    • 例如:连接标识符360se:7668(p58566),客户端为360se,进程编号7668,端口号58566。
    • 同一进程同一端口号的会话,将在同一条形栏中显示,同一进程不同端口号则多个栏目显示。

监控面板-TimeLine-客户端管道

(3) 服务端管道

  • Server Pipe Map模式下,显示每个时间轴的Fiddler和上游服务器之间的连接。
  • 左侧显示连接标识符,包括:Fiddler端的端口号、目标主机名。
    • 例如:p58571->localhost:4000,Fiddler使用端口58571连接到localhost的4000端口。
    • 一条形栏代表一个连接,一个连接支持被多个会话复用,下图选择的会话都属于两两复用。

监控面板-TimeLine-服务端管道

(4) 做性能分析

  • 时间轴是一种对应用程序使用网络的富信息视图表示。
    • 依据条形栏的长短可以找出响应快慢的请求:越短响应越快,越长响应越慢。
    • 浏览器开启线程数有限,默认请求数为6个,由于连接限制也会带来性能瓶颈。
    • 若有红色X图标,表示服务器发送了请求头Connection: close,阻止后续请求重用该连接。

监控面板-TimeLine-做性能分析

5 状态面板

  • 状态面板
    • 启用/禁用抓包Capturing:状态面板-启用/禁用抓包Capturing表示正在抓包,鼠标单击图标,切换成空白则表示禁用抓包。
    • 点击状态面板-正在捕获的进程All Processes,选择抓取HTTP数据报文的选项。
      • All Processes:抓取所有进程的报文。
      • Web Browsers:仅抓取浏览器进程的报文。
      • Non-Browser:仅抓取非浏览器进程的报文,国内一些非主流浏览器可能不会被当做浏览器进程。
      • Hide All:过滤掉所有进程的HTTP报文,和禁用抓包效果一致,即在会话列表中不显示任何会话。
    • 断点:调试器的功能之一,支持让程序中断在需要的地方,从而方便其分析。
      • 全局请求断点状态面板-全局请求断点:将用户请求发送给服务器之前,打一个全局请求断点,可对请求进行修改。
      • 全局响应断点状态面板-全局响应断点:将服务器的响应发送到客户端之前,打一个全局响应断点,可以修改响应。
      • 取消断点
        • 逐个释放断点:选中被打断点的请求,点击监控面板中的按钮监控面板-Run to Completion
        • 释放全部断点:点击工具面板中的恢复断点执行按钮工具面板-Go,即可释放全部断点。
    • 会话数状态面板-Number of sessions,显示了当前抓取的总会话数(右侧数值),以及选中的会话数(左侧数值)。
    • 状态信息
      • 状态面板-Status Information,默认显示选中的第一个会话的URL。
      • 还支持显示操作结果的概要信息,例如:加载文件、保存SAZ文件等。

状态面板

6 命令输入栏

  • 命令输入栏
    • Fiddler处于活动状态时,Alt+Q快捷键可以把光标快速定位到QuickExec命令输入框。
    • Fiddler没有处于活动状态时,使用CTRL+ALT+F激活窗口,再使用Alt+Q快捷键定位。
    • 当光标定位在QuickExec命令输入框时,CTRL+I键会把选中的第一个会话URL插入到命令输入框中。
    • 还可以选中多个会话,一起拖动到QuickExec命令输入框中释放,此时选中的会话URL都将插入其中。
    • 支持从系统任意位置处拖动一个或多个文件到QuickExec命令输入框中释放,输入框将显示文件路径。
    • 在QuickExec命令输入框中输入help回车,将自动打开浏览器,关于QuickExce的在线命令帮助文档。
      • start开启抓包,stop停止抓包,quit关闭Fiddler。
      • clsclear清理会话列表,hide将Fiddler最小化到任务栏的托盘上。
      • 文本查找:?searchtext,高亮显示会话列表包含searchtext文本的会话。
      • 匹配主机:@host,高亮显示会话列表中请求主机名包含host的会话,例如@sougo.com
      • 状态或方法过滤:=404=POST,高亮显示会话列表中等于指定状态码或指定方法的会话。
      • 响应大小过滤:>size,高亮显示会话列表中响应大小大于size字节的会话,<size反之。
      • 执行DNS查找:!dns www.baidu.com,对百度首页执行DNS查找并在Log选项卡上显示结果。
      • 突出显示会话:bold sometext,后续抓到包含sometext字符串的会话加粗显示,bold回车取消。
      • 断点
        • bpv method,将在抓到方法为method的会话上添加请求断点,bpv回车取消操作。
        • bps status,将在抓到状态为status的会话上添加响应断点,bps回车取消操作。
        • bpu sometext,将在抓到包含sometext字符串的URI会话上添加请求断点,bpu回车取消操作。
        • bpafter sometext,将在抓到包含sometext字符串的会话上添加响应断点,bpafter回车取消。
        • ggo,恢复所有断点会话。
      • 过滤
        • select sometext,将选择响应Content-Type头包含指定的sometext字符串的任何会话。
        • 支持其他过滤方式,提供两个内置变量@Request@Response对象,支持过滤其他头字段。
        • 例:select @Request.User-Agent Mozilla选择所有用户User-Agent包含Mozilia的会话。
      • 会话备份:dump,将所有会话转储到系统盘中的zip存档,路径在状态面板的状态信息栏中可见。
      • 替换URL:urlreplace str1 str2,将抓到会话的URL中str1替换成str2urlreplace回车取消。
      • 监听额外端口:!listen *PORT [CERTHOSTNAME]*,例如!listen 8889!listen 4000 localhost
      • 条件隐藏:allbut textkeeponly text,隐藏响应会话的Content-Type中未包含text的所有会话。

命令输入栏

7 应用快捷键

  • 应用快捷键
    • 任何情况下都可使用系统级别的热键Ctrl + Alt + F激活Fiddler,还提供了其他热键(略)。
    • 全局热键支持自定义修改,菜单栏->Tools->Options->General->Systemwide Hostkey。

应用快捷键

8 Fiddler插件

  • Fiddler插件
    • https://www.telerik.com/fiddler/add-ons:提供了很多常用的Fiddler插件。
    • 性能相关:neXpert(性能报告生成器,免费)、StresStimulus(负载能力测试扩展支持,试用)。
    • 安全相关
      • x5s(评估网站漏洞,包括跨站脚本错误,开源)、Ammonite(监测常见的网站漏洞,试用)。
      • Watcher(被动安全审计器,开源)、intruder21(支持对Web应用程序执行模糊测试,免费)。
    • 其他插件
      • Javascript Formatter(可格式化JavaScript)、Gallery(显示选中会话中的所有图片)。
      • Traffic Differ(对比捕获的两套流量)、PDF View(PDF检查器,生成PDF文件预览)。
      • Content Blocker(内容拦截器)、Show Image Bloat(扫描图像文件以查找不必要的嵌入元数据)。
      • Willow(统计数据包、修改Host、请求重定向、编码转换、低网速模拟、慢速网络模拟可视化等)。

8-1 Willow

  • Willow
    • 官网:http://qzonetouch.github.io/commonWidget/willow
    • 插件功能
      • 修改Host、断点调试、统计数据包、编码转换、过滤HTTP请求。
      • 环境切换、请求重定向、低网速模拟、慢速网络模拟可视化等等。
    • 点击当前版本进行下载,解压WillowSetup-1.5.2.zip,安装插件前先关闭Fiddler软件。
    • 使用Willow创建三个项目,分别为开发/测试/正式环境,通过项目复选框可快速在三个环境之间进行切换。
    • 真实项目中可能有几十上百个规则,分环境管理十分方便,避免了手动点击规则进行环境切换的繁杂操作。

Fiddler插件-Willow

Fiddler插件-Gallery

8-3 PDF View

Fiddler插件-PDF View

8-4 Traffic Differ

Fiddler插件-Traffic Differ

8-5 Show Image Bloat

Fiddler插件-Show Image Bloat

8-6 Javascript Formatter

  • Javascript Formatter
    • 下载:https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlerjsformatsetup.exe
    • 支持格式化JavaScript,会话面板中选择一个JavaScript会话,右键点Make JavaScript Pretty。
    • 右侧监控面板->Inspectors选项卡->在响应部分选SyntaxView->此时压缩的Js代码已格式化。
    • 或菜单栏->Rules->单击Make JavaScript Pretty,开启当前选中的JavaScript会话格式化功能。

Fiddler插件-Javascript Formatter

9 Fiddler抓包

  • Fiddler抓包
    • HTTPS,Hyper Text Transfer Protocol over SecureSocket Layer,HTTP+TLS/SSL协议构建。
    • 通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密、身份认证的网络协议。
    • 设计目标:数据保密性、数据完整性、身份校验安全性,因此,Fiddler抓包的关键点就是证书。
    • 抓包原理
      • Fiddler是浏览器的服务器,也是服务器的客户端。
        • 没有Fiddler时,浏览器拥有的公有证书来自服务器,服务器保存私有证书。
        • 服务器使用私有证书对数据进行加密,浏览器使用公有证书对数据进行解密。
      • Fiddler作为代理时,客户端拥有的公有证书来自Fiddler,Fiddler同时拥有私有和公有证书。
        • 请求:浏览器使用Fiddler公有证书将数据加密,发送给Fiddler。
        • Fiddler使用私有证书解密,将内容采用服务器的公有证书再次加密。
        • 内容加密后再发送给服务器,服务器使用自己的私有证书再进行解密。
        • 响应:服务器使用私有证书对响应数据加密,然后发送给Fiddler。
        • Fiddler将收到的数据使用服务器的公有证书解密,再次使用自己的私有证书加密。
        • 加密后发送给浏览器,浏览器收到后使用Fiddler的公有证书进行解密,展示内容。

9-1 PC端抓包

  • PC端抓包
    • 配置及安装证书:菜单栏->Tools->Options->HTTPS。
    • 勾选Capture HTTPS CONNECTs、Decrypt HTTPs traffic。
      • Capture HTTPS CONNECTs:是否要抓取HTTPS连接。
      • HTTPS连接默认隐藏:菜单栏->Rules->Hide CONNECTs是否被勾选了。
      • Decrypt HTTPs traffic:对接收到的HTTPS流量尝试使用Fiddler证书解码。
    • 菜单栏->Tools->Options->HTTPS->Actions->Open Windows Certificate Manager。
    • certmgr->操作->查找证书->包含Fiddler->立即查找,若有证书说明可以抓HTTPS包。

Fiddler抓包-PC端抓包

9-2 APP抓包

  • APP抓包
    • 配置Fiddler:菜单栏->Tools->Options->Connections->Allow remote computers to connect。
    • 弹窗Enabling Remote Access->确定,USB线连接手机端和电脑端,同时开启手机端的开发者选项。
    • Fiddler查看工具面板中Online的IP地址,确保电脑和手机的WiFi在同一局域网下,开启手机端代理。
    • 进入手机端的WiFi设置->代理改为手动,主机名是Online查看到的IP地址,端口则为8888(自定义)。
    • 打开手机端的浏览器,输入Online的IP地址+端口8888,回车下载FiddlerRoot certificate,安装证书。
    • 注:对于现在的手机端APP,大多使用SSL Pinning技术,Fiddler已很难抓取到HTTPS包了。
      • Android:使用Xposed Magisk模块或Frida等工具来绕过SSL Pinning技术。
      • iOS:采用插入证书、重签名、Frida Hook的方式来绕过SSL Pinning技术。
      • 上述方法都具风险性,需谨慎使用并遵守法律法规,可在APP中集成调试工具进行调试。

Fiddler抓包-APP抓包


Fiddler 面板
https://stitch-top.github.io/2022/03/02/ce-shi-gong-ju/tt02-fiddler/tt01-fiddler-mian-ban/
作者
Dr.626
发布于
2022年3月2日 22:37:55
许可协议