fiddler详解
一.介绍
Fiddler是一个http协议调试工具,能记录并检查电脑和互联网之间的http通讯,设置断点,查看所有的“进出”fiddler的数据(cookie,html,js,css等文件)
通常可从以下3方面理解:
代理服务器(proxy):Fiddler运行后在客户端和服务器端之间创建一个代理服务器(地址是127.0.0.1,端口是:8888)客户端对服务器的请求,服务器对客户端的响应都要经过Fiddler创建的代理服务器。
抓包工具(packet capture tool):由于Fiddler运行后能创建代理服务器,能够记录客户端和服务器之间的所有http请求响应的数据,就是所谓的抓包。
调试工具(debug tool):Fiddler可以对http请求数据进行分析,修改,调试,还可以设置断点,调试web应用。
二.原理
启动Fiddler后,Fiddler在客户端和服务器之间创建代理服务器。
当客户端向发送请求时,代理服务器先收到请求,然后再把请求转发至web server。
web server收到Fiddler转发的客户端请求后,发送响应(response),Fiddler收到响应后再转发给客户端。
Fiddler有两种工作模式:流模式(Streaming Mode)、缓冲模式(Buffering Mode)。
流模式(Streaming Mode):Fiddler收到响应后立即返回给客户端。
缓冲模式(Buffering Mode):Fiddler收到数据后先缓存,等待所有数据都准备好之后才返回给客户端。
三.下载
1.查看framework版本
(1)打开资源管理器,在地址栏输入“C:\Windows\Microsoft.NET\Framework”
(2)在文件夹下可以看到多个文件夹,最高版本就是当前的Net Framework版本
2.确定Fiddler版本
如果你的计算机上的framework的版本大于等于4.0,那么就下载fiddler4,
如果小于4.0,就下载fiddler2.
fiddler2和fiddler4在功能上没有太多的区别,只是在底层封装上有稍微区别。
四.同类工具
httpwatch,firebug,wireshark
对比同类工具的优缺点:
httpwatch:ie的抓包工具
firebug:firefox的一个插件,超牛的web调试工具
fiddler2:一个网络调试代理,用来检测本地计算机和Internet之间所有的HTTP(s)通讯。抓包fiddler2要比firebug 强,不过2者都只能 捕获到http协议的。
WireShark:是一个网络封包分析软件,网络封包分析软件的功能是获取网络封包。应尽可能显示出最为详 细的网络封包 资料,直接获取网卡数据,系统底层抓包神器。
五.界面布局
Fiddler默认布局中,主要分为6个区域。
菜单栏(Menu bar)
工具栏(Tools bar )
会话列表面板(Session list )
辅助功能面板(Axuxiliary function panel )
命令行控制台(Command console)
状态栏(Status bar)
(1)会话列表面板(Session list )
默认的Fiddler会话列表中有11个列项:
#,会话icon和HTTP请求的序列号,点击可在顺序和倒叙排列之间切换。
Result,HTTP响应状态码。
Protocol,请求使用的协议,如HTTP、HTTPS等。
Host,请求地址的域名。
URL,请求的服务器路径和文件名,也包括GET参数。
Body,请求的大小以字节(byte)为单位。
Caching,请求的缓存过期时间或缓存控制(Cache-control)、Header取值。
Content-Type,响应的类型。
Process,发出请求的本地进程名即进程ID(PID)。
Comments,用户对会话的备注内容。
Custom,用户通过脚本设置的自定义值,默认没有(如IP等)。
(2)工具栏(Tools bar )
1.Winconfig,Windows 使用了一种称为“AppContainer”的隔离技术,使得一些进程的流量无法捕获,打开WinConfig后可设置解除隔离。
2.气泡按钮,给session list中的会话添加备注。选中一条回话,再点击该气泡按钮可直接添加备注内容。
3.replay,对某条会话的请求进行重发。选中一条回话,按下该按钮,session list末尾会看到一条新的会话请求,和原来的完全一样。
4.×号(delete),清空回话列表,带筛选功能。点击按钮,弹出下拉列表,7个选项,按需求选择不同选项删除会话。
5. Go,对设置了断点的请求继续往下执行。
6. stream,在“流模式(Streaming Mode)”和“缓冲模式(Buffering Mode)”两种代理模式之间切换,Fiddler默认为缓冲模式,按下该按钮为流模式。
7. decode,把http请求里的东西解压出来。
8. keep:xx session,选择session list中存放多少数量的会话。
9 .any process,靶向按钮,点中靶向图标再拖拽到目标进程(浏览器或其他客户端应用程序)进行监听。
10. find,按关键词查找会话,将查找到的会话以自定义的颜色标注出来。
11. save对当前捕获到的会话进行保存,可通过file菜单打开已保存的会话。
12. 相机图标,屏幕截图,有5s倒计时,按住shift键盘可跳过倒计时直接截屏。
13. 秒表图标,计时器按钮。第1次点击开始计时,第2次结束计时,右键复位清零。
14 .browser,快速启动浏览器。
15 .clear cache,该按钮是清空浏览器缓存的快捷键。
16 .Textwizard,字符编码、解码,字符集转换工具。
17 .tearoff,让辅助面板浮动起来(或者说和主窗口分离开来,曾为一个独立的窗口)
18. MSDN搜索框,Microsoft Developer Network在线搜索。
19. Fiddler官方在线帮助
20. 网络链接状态,Online或Offline。
21. 关闭工具栏,关闭后可通过菜单“View”→“Show toolbar”开启工具栏。
(3)控制台
Fiddler的左下角有一个命令行工具叫做QuickExec,允许你直接输入命令。
help 打开官方的使用页面介绍,所有的命令都会列出来
cls 清屏 (Ctrl+x 也可以清屏)
select 选择会话的命令
?.png 用来选择png后缀的图片
bpu 截获request
bpafter 截获response
(4)辅助功能面板(Axuxiliary function panel )
a.统计报表
(1) 请求总数、请求包大小、响应包大小;
(2) 请求起始时间、响应结束时间、握手时间、等待时间、路由时间、TCP/IP传输时间;
(3) HTTP状态码统计;
(4) 返回的各种类型数据的大小统计以及饼图展现。
b.时间轴
每个网络请求都会经历域名解析、建立连接、发送请求、接受数据等阶段。把多个请求以时间作为 X 轴,用图表的形式展现出来,就形成了瀑布图。在Fiddler 中,只要在左侧选中一些请求,右侧选择Timeline标签,就可以看到这些请求的瀑布图
1)绿色的请求表示这是一个“有条件的请求”。HTTP 协议定义了 5 个条件请求头部,最常见的两个是“If-Modified-Since”和“If-None-Match”。服务器根据这两个头部来验证本地缓存是否过期,如果过期则正常返回资源的最新版本;否则仅返回 304 Not Modified,浏览器继续使用本地缓存。包含条件请求头部的请求用绿色显示,否则用黑色。
2)有阴影线的请求是缓冲模式下的请求,实心的是流模式下的请求。Fiddler 提供了缓冲(Buffering)和流(Streaming)两种抓包模式:缓冲模式下,Fiddler 会在响应完成时才将数据返回给应用程序(通常是浏览器),这种模式下可以控制响应,方便地修改响应内容;流模式下,Fiddler 会实时返回响应数据给浏览器,但没办法控制响应。一般使用流模式,瀑布图会更真实一些。这两种模式可以通过 Fiddler 的工具栏选择。特别的,通过 Fiddler 的“AutoResponder”功能返回的响应,只能是缓冲模式。
3)请求条的不同颜色对应着不同类型的响应,根据响应头的 MIME Type 来归类。如浅绿色表示图片类型的响应;深绿色是 JavaScript;紫色是 CSS;其它都是蓝色。
4)请求中的黑色竖线,表示的是浏览器收到服务端响应的第一个字节这一时刻。这个时间受 DNS 解析、建立连接、发送请求、等待服务端响应等步骤的影响。
5)请求条后面的图标表示响应的某些特征。如软盘图标表示这个响应正文从本地获得,也就是说服务端返回了 304;闪电表示这是 Fiddler 的“AutoResponder”的响应;向下的箭头表示响应是 302,需要重定向;红色感叹号说明这个请求有错误发生(状态码是 4XX 或 5XX)。特别的,如果请求条后面有一个红色的X,说明服务端响应完这个请求之后,断开了连接。出现这种情况一般有两种可能:HTTP/1.0 的响应中没有 Connection: Keep-Alive;或者是 HTTP/1.1 的响应中包含了 Connection: close。使用持久连接可以省去建立连接的开销,也可以减小 TCP 慢启动和其它拥塞控制机制带来的影响,总之是好处多多。
6)请求前面的红色圆圈表示这个连接是新建的,绿色表示是复用的。上面的圆圈表示的是浏览器到 Fiddler 的连接,下面的圆圈是 Fiddler 到服务端的连接。
六.http协议相关
(1)http:
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,
超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器,目前我们使用的是HTTP/1.1 版本。
(2)http消息结构
先看Request 消息的结构, Request 消息分为3部分,
第一部分叫Request line,
第二部分叫Request header,
第三部分是body. header和body之间有个空行。
第一行中的Method表示请求方法,比如"POST","GET", Path-to-resoure表示请求的资源,
Request
Http/version-number 表示HTTP协议的版本号,当使用的是"GET" 方法的时候, body是为空的。
Response
Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX —— 提示信息,表示请求已被成功接收,继续处理
2XX —— 成功,表示请求已被成功接收,理解,接受
3XX —— 重定向,要完成请求必须进行更进一步的处理
4XX —— 客户端错误,请求有语法错误或请求无法实现
5XX —— 服务器端错误,服务器未能实现合法的请求
常见响应码说明:
200:响应成功,这表明该请求被成功地完成,所请求的资源发送回客户端
302:重定向,新的URL会在response 中的Location中返回,浏览器将会自动使用新的URL发出新的Request
304:代表上次的文档已经被缓存了, 还可以继续使用,例如打开博客园首页, 发现很多Response 的status code 都是304
[提示: 如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面]
400 : 客户端请求与语法错误,不能被服务器所理解
403:服务器收到请求,但是拒绝提供服务
404 :找不到网页,请求的资源不存在
500 : 服务器发生了不可预期的错误
503 :服务器当前不能处理客户端的请求,一段时间后可能恢复正常
七.常用功能
1.Filters(过滤监控)
使用Filters可以过滤掉不想要的session,看起来更方便。
Hosts过滤
Zone:指定只显示内网(Intranet)或互联网(Internet)的内容;
Host:指定显示某个域名下的会话;
-No Host Filter:无HOST过滤;
Hide the following Hosts:只显示如下HOST;
Flag the following Hosts:加粗显示如下HOST;
输入多个HOST,多个之前用半角逗号或者回车分隔;
支持通配符:*,baidu.com;
域名: 写成 baidu.com ,不能写https://baidu.com
2.AutoResponder(请求重定向)
3.Fiddler中设置断点修改Request和Response
Fiddler最强大的功能莫过于设置断点了,设置好断点后,你可以修改httpRequest的任何信息包括host, cookie或者表单中的数据。设置断点有两种方法:
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpu
4.模拟低速网络(限速)
5.模拟 mock
访问一个url,返回自己想要的结果。
json串自己写的,保存txt格式,打开url后,产生session,用重定向,指向txt文件。然后强制刷新页面,就能得到想要的结果。
6.监听HTTPS
Fiddler不仅能监听HTTP请求而且默认情况下也能捕获到HTTPS请求,
Tool -> Fiddler Option -> HTTPS下面进行设置,勾选上“Decrypt HTTPS traffic”,
如果不必监听服务器端得证书错误可以勾上“Ignore server certification errors”,也可以跳过几个指定的HOST来缩小或者扩大监听范围。
八.抓取Android机上的包
现在的Android应用程序几乎都会和网络打交道,所以在分析一个apk的时候,如果可以抓取出其发出的数据包,将对分析程序的流程和逻辑有极大的帮助。
对于HTTP包来说,已经有很多种分析的方法了,例如用tcpdump,或者将要分析的程序跑在模拟器中然后直接在物理机上用WireShark抓包。但是现在越来越多的应用已经使用HTTPS协议来和服务器端交换数据了,这无疑给抓包分析增加了难度。
幸好有一个工具Fiddler可以用来解决这个问题。Fiddler是一个非常强大的Web调试工具,它的原理不同于WireShark。WireShark是让网卡工作在混杂模式下,截取所有网络上的数据包进行分析,而Fiddler本质上是一个HTTP/HTTPS代理服务器。
既然是代理服务器,那当然可以拿到所有的包了。
这里以Google Play为例,来演示如何操作,步骤如下:
1)请确保你的Android设备和你安装Fiddler的电脑都连接到一个WiFi AP上,两台机器在一个局域网段里,
2)配置Fiddler抓取并解密HTTPS包
Fiddler默认是不抓取HTTPS包的,需要进行相应的配置。
打开Fiddler,选择“Tools->FiddlerOptions...”在弹出的对话框中选择“HTTPS”选项卡:勾选“Capture HTTPSCONNECTs”,接着勾选“Decrypt HTTPS traffic”。同时,由于我们是通过WiFi远程连过来,所以在下面的选项框中选择“...from remote clients only”。
如果你要监听的程序访问的HTTPS站点使用的是不可信的证书,则请接着把下面的“Ignore server certificate errors”勾选上。
接着切换到"Connections"选项卡:
监听端口默认是8888,当然你可以把它设置成任何你想要的端口。请一定要勾选上“Allow remote computers to connect”。
为了减少干扰,可以去掉“Act as system proxy onstartup”。
最后点“OK”退出,Fiddler就算是设置好了。
还有一点提醒大家注意,请一定记住将你本机上的防火墙关闭,笔者在这上面浪费了不少时间。
3)设置Android设备,添加上代理服务器
先查看一下安装Fiddler的电脑的IP地址是多少,在cmd里使用ipconfig命令就好了。
可以看到,笔者电脑分配到的IP地址是192.168.11.8。这就是要在Android设备上设置的代理服务器地址,至于端口嘛,就是在前面设置的监听端口,默认是8888。
好了,一切准备就绪,下面来设置Android设备上的代理服务器。
打开WiFi设置页面,选择要连接的AP,并且长按,在弹出的对话框中,选择“修改网络”。
在接下来弹出的对话框中,勾选“显示高级选项”。在接下来显示的页面中,点击“代理”,选择“手动”。
在“代理服务器主机名”和“代理服务器端口”中写上前面得到的地址和端口,最后点“保存”。
最后,连接上这个无线AP就可以了。
4)导证书到Android设备
Fiddler本质上是一个HTTPS代理服务器,其自己带的证书显然不会在Android设备的受信任证书列表里。
有些应用程序会查看服务器端的证书是否是由受信任的根证书签名的,如果不是就直接跳出。
所以,为了保险起见,我们要将Fiddler代理服务器的证书导到Android设备上。
导入的过程非常简单,打开设备自带的浏览器,在地址栏中输入代理服务器的IP和端口,例如本例中我们会输入192.169.11.8:8888,进入之后会看到一个Fiddler提供的页面:
点击页面中的“FiddlerRoot certificate”链接,接着系统会弹出对话框:
输入一个证书名称,然后直接点“确定”就好了。
(如果安装不了,把下载的cer证书文件复制到内存卡上,手机设置-高级设置-安全-从SD卡安装,选择fiddler证书安装即可)
一切都设置完成了,我们来抓包看看效果吧,打开Android设备上的“Google Play”,看看能拿到什么:
看到了没有,全都能拿出来,再结合其它的一些动态或静态的分析方法,破解协议将变得容易一些。
最后,不得不提这种方法的一些优点和缺点。
首先来谈优点,有以下几点:
1)手机不需要root就可以抓包;
2)可以用真机抓包,有些程序是抗动态分析的,能够判断自己运行在模拟器中。
缺点嘛,当然也有:
1)必须要用WiFi连接(这个很容易满足);
2)要抓包分析的应用程序必须自己支持代理服务器的设置。
原文链接:https://blog.csdn.net/lzmlc0109/article/details/78364263