热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

fiddler_fiddler详解

  一.介绍Fiddler是一个http协议调试工具,能记录并检查电脑和互联网之间的http通讯,设置断点,查看所有的“进出”fiddle

 

 

一.介绍
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:WindowsMicrosoft.NETFramework”
             (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


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
author-avatar
xuanchen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有