Fiddler使用介绍

关于 Fiddler 的使用在之前我是看过的,但是今天偶然发现已经差不多全部忘光了,所以呀,还是记录下比较好,意外的发现它的附加的一个功能非常好用,就是排除 UWP 应用在“安全沙箱”运行,让 UWP 应用能够使用系统的代理。
关于它的简单介绍:

Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有的“进出”的数据(我一般用来抓包),Fiddler还包含一个简单却功能强大的基于JScript .NET事件脚本子系统,它可以支持众多的HTTP调试任务。

Fiddler 是以代理WEB服务器的形式工作的,浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器;
它使用代理地址:127.0.0.1, 端口:8888. 当Fiddler开启会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法可以重新启动下Fiddler

官方提供了详细的文档和视频教程,如果英语好,可以去参考

界面

Fiddler的主界面分为 工具面板、会话面板、监控面板、状态面板;应该都看得见在那,都在主页面上
下面主要来看看比较复杂的工具面板,从左往右包含:
说明注释、重新请求、删除会话、继续执行、流模式/缓冲模式、解码、保留会话、监控指定进程、寻找、保存会话、切图、计时、打开浏览器、清除IE缓存、编码/解码工具、弹出控制监控面板、MSDN、帮助

PS:在新版本增加了对 Win8+ 的 UWP 应用代理支持,就是第一个 WinConfig 在里面可以设置 UWP 应用的白名单,也就是绕过“安全沙箱”可以让其使用代理
会话面板图标.png

模式

上面提到了某个按钮是转换模式的,分为两种:

  • 缓冲模式(Buffering Mode)
    Fiddler直到 HTTP 响应完成时才将数据返回给应用程序。可以控制响应,修改响应数据。但是时序图有时候会出现异常
  • 流模式(Streaming Mode)
    Fiddler 会即时将 HTTP 响应的数据返回给应用程序。更接近真实浏览器的性能。时序图更准确,但是不能控制响应。

采用哪种模式看需求吧,默认应该是流模式,更加符合实际情况

监控面板

这个面板很重要,看的最多的应该就这个了,里面也包含了很多的选项卡,下面就来说说各个选项卡是做什么的

审查(inspectors )

指的是 inspectors 选项卡,不要在意前面的翻译
类似于 Chrome 的 F12 里的 NetWork,不过应该是更强大,可以对某个请求的头信息、内容、响应进行查看和操作,反正是很强大
关键是能修改啊,配合断点简直爽

统计(statistics)

是的,就是统计一些请求或者其他啥的数据,还有图标显示,主要包含有:

  1. 请求总数、请求包大小、响应包大小。
  2. 请求起始时间、响应结束时间、握手时间、等待时间、路由时间、TCP/IP、传输时间。
  3. HTTP状态码统计。
  4. 返回的各种类型数据的大小统计以及饼图展现。

当然并不只是这些,数据的描述都是英文,像我这种英语渣渣只能复制到 Google 去翻译下看看什么意思…..

时间轴(Timeline)

每个网络请求都会经历域名解析、建立连接、发送请求、接受数据等阶段。把多个请求以时间作为 X 轴,用图表的形式展现出来,就形成了瀑布图。
在Fiddler中,只要在左侧选中一些请求,右侧选择 Timeline 标签,就可以看到这些请求的瀑布图,不同的请求形式会有不同的颜色

  • 绿色的请求
    表示这是一个“有条件的请求”。HTTP 协议定义了 5 个条件请求头部,最常见的两个是“If-Modified-Since”和“If-None-Match”。
    服务器根据这两个头部来验证本地缓存是否过期,如果过期则正常返回资源的最新版本;否则仅返回 304 Not Modified,浏览器继续使用本地缓存。
    包含条件请求头部的请求用绿色显示,否则用黑色。
  • 有阴影线的请求
    它是缓冲模式下的请求,实心的是流模式下的请求
    Fiddler 提供了缓冲(Buffering)和流(Streaming)两种抓包模式:缓冲模式下,Fiddler 会在响应完成时才将数据返回给应用程序(通常是浏览器),这种模式下可以控制响应,方便地修改响应内容;流模式下,Fiddler 会实时返回响应数据给浏览器,但没办法控制响应。
    一般使用流模式,瀑布图会更真实一些。这两种模式可以通过 Fiddler 的工具栏选择。
    特别的,通过 Fiddler 的“AutoResponder”功能返回的响应,只能是缓冲模式
  • 请求条的不同颜色对应着不同类型的响应,根据响应头的 MIME Type 来归类。
    如浅绿色表示图片类型的响应;深绿色是 JavaScript;紫色是 CSS;其它都是蓝色。
  • 请求中的黑色竖线
    表示的是浏览器收到服务端响应的第一个字节这一时刻。这个时间受 DNS 解析、建立连接、发送请求、等待服务端响应等步骤的影响。
  • 请求条后面的图标表示响应的某些特征
    如软盘图标表示这个响应正文从本地获得,也就是说服务端返回了 304;
    闪电表示这是 Fiddler 的“AutoResponder”的响应;
    向下的箭头表示响应是 302,需要重定向;
    红色感叹号说明这个请求有错误发生(状态码是 4XX 或 5XX)。
    特别的,如果请求条后面有一个红色的X,说明服务端响应完这个请求之后,断开了连接。出现这种情况一般有两种可能:HTTP/1.0 的响应中没有 Connection: Keep-Alive;或者是 HTTP/1.1 的响应中包含了 Connection: close。
    使用持久连接可以省去建立连接的开销,也可以减小 TCP 慢启动和其它拥塞控制机制带来的影响,总之是好处多多。
  • 请求前面的红色圆圈
    表示这个连接是新建的,绿色表示是复用的。
    上面的圆圈表示的是浏览器到 Fiddler 的连接,下面的圆圈是 Fiddler 到服务端的连接。

时间轴也是分析的时候很重要的一个面板

模拟响应(AutoResponder)

这是 Fiddler 比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。
可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。
因此,如果要调试服务器的某个脚本文件,可以将该脚本拦截到本地,在本地修改完脚本之后,再修改服务器端的内容,这可以保证,尽量在真实的环境下去调试,从而最大限度的减少bug发生的可能性。
一般设置步骤为:

  1. 选中想要拦截的请求,比如 /api/foo
  2. 开启模拟(Enable rules)再选择 “Add Rule”
  3. 在最下面的下拉框选择 “Create New Response…”
  4. 然后 “Save”

匹配支持正则,支持常用的重定向方式,这个功能真是一大杀器

模拟请求(Composer)

老版本的 fiddler 中叫 request-builder. 顾名思义,可以构建相应的请求,有两种常用的方式构建请求:

  1. Parsed 输入请求的 url 之后 executed 即可,也可以修改相应的头信息
    如添加常用的 accept, host, referrer, cookie,cache-control 等头部后再 execute.
    这个功能的常见应用是:“刷票”(不是火车票!!),如刷新页面的访问量(那啥,不要做为好)
  2. Raw。
    使用 HTTP 头部信息构建 http 请求。与上类似。不多叙述

其他

常用的也就是这几个,还有一个就是 Filter,基本你能想到的基本都支持了,不多说
脚本功能应该也很 NB ,但我是没怎么用过,或者可以去找网友写好的脚本使用

状态面板

这个在软件界面的左下角,还是蛮重要的,控制台Fiddler的左下角有一个命令行工具叫做 QuickExec,允许你直接输入命令(就是那个黑框框)。
常见得命令有:

命令解释
help打开官方的使用页面介绍,所有的命令都会列出来
cls清屏 (Ctrl+x 也可以清屏)
select选择会话的命令
?.png用来选择png后缀的图片
bpu截获request
bpafter截获response

然后最左边的图标控制拦截的开启和关闭,右边是请求的来源,还有比较重要的就是设置断点了,在请求数的左边有一个空白的位置,它可以点击,有三种状态,每点击一次就切换一种状态:

  1. 空白:
    不设置断点。
  2. 箭头向上:
    表示断点请求。此时客户端的请求是无法直接到达目标服务器的,需要手动控制。
  3. 箭头向下:
    表示断点响应。此时目标服务器的响应是无法直接到达客户端的,需要手动控制。

断点操作一般就是这几步:

  1. 设置断点请求,手机端访问接口
  2. 点击对应的会话
  3. 查看请求报文信息
  4. 修改请求内容
  5. 完成断点,放行,把该请求发送给目标服务器。

对应这幅图:
fiddler.png

修改的时候留意下超时时间就行了
上面的操作其实都可以通过命令行来完成

其他常用

常用的功能还有抓 HTTPS 的包、移动端抓包等,等想到更多了再来补充

抓取 HTTPS

Fiddler不仅能监听HTTP请求而且默认情况下也能捕获到HTTPS请求,Tool -> Options... -> HTTPS 下面进行设置,勾选上 “Decrypt HTTPS traffic”
还可以选择忽略证书错误(建议勾上)和忽略指定的 HOST 地址

移动端抓包

Fiddler 不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求。
前提条件是:安装Fiddler的机器,跟设备在同一个网络里, 否则不能把 HTTP 发送到安装 Fiddler 的机器上来。

具体的设置步骤为(以 iPhone 为例):

  1. 打开 Fiddler,选择 Tools-> Options。(配置完后记得要重启Fiddler).
  2. 选中Connections 选项卡下的 “Allow remote computers to connect”. 是允许别的机器把 HTTP/HTTPS 请求发送到 Fiddler 上来
  3. 查看 Fiddler 所在机器的 IP(可通过 ipconfig 命令)
  4. 安装 Fiddler 证书
    这一步是为了让 Fiddler 能捕获HTTPS请求。 如果你只需要截获 HTTP 请求, 可以忽略这一步
    首先要知道 Fiddler 所在的机器的IP地址,假如我安装了 Fiddler 的机器的IP地址是:192.168.1.104;打开IPhone 的Safari, 访问 http://192.168.1.104:8888, 点 “FiddlerRoot certificate” 然后安装证书
  5. 打开iPhone, 找到你的网络连接, 打开HTTP代理, 输入 Fiddler 所在机器的 IP 地址以及 Fiddler 的端口号8888

现在 Fiddler 就可以获取到移动设备的数据请求了

关于Wireshark

Wireshark 是另外一种抓包工具,这种工具比 fiddler 更强大,消息量更多,开源,支持更多的协议。
这里说下,在测试中,发现用 fiddler 抓包,有些包是没有抓到的,比如在验证反作弊信息的时候,反作弊pingback 信息的消息用 fiddler 就没抓到,用 wireshark 就抓到了。

Wireshark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换,注重的是网络封包分析
使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。
为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包
Fiddler 更注重的是 HTTP 协议调试方面

Wireshark 配置起来比 fiddler 麻烦一些,学习门槛相对来说比较高,有机会再来学一学。
其他的抓包工具还有 tcpdump 可以理解为没有界面的 Wireshark 在 Linux 上用的比较多
Wireshark 能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结:如果是处理 HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark.

其他

还记得被广泛用于游戏外挂的 WPE 三件套(Winsock Packet Editor、Easy2Game、CCProxy),就是因为可以修改、发送封包,配合代理简直就…..
好孩子就不要研究了,也不简单。
可参考:Wiki 上的一些介绍

参考

http://www.jianshu.com/p/99b6b4cd273c
https://segmentfault.com/a/1190000004240812

喜欢就请我吃包辣条吧!

评论框加载失败,无法访问 Disqus

你可能需要魔法上网~~