目录

一、Fiddler抓包

1.1原理简介

1.2抓取第一个报文

1.3报文分析

1.3.1Statistics(统计工具)

1.3.2Inspectors(审查工具)

1.3.3AutoResponder(自动响应)

1.3.4Composer(自定义请求)

1.3.5Filters(过滤器)

1.3.6Timeline(请求响应时间探查工具)

1.4Fiddler中响应图标表示的含义

二、断点

三、弱网测试

3.1如何设置弱网环境


前言

        Fiddler是一款免费抓包工具,其不仅可以抓取来自PC端的报文,也可以抓取来自手机端的报文,而且Fiddler还提供了弱网模拟、Mock模拟等功能。本文将围绕提到的这几个点来展开。为了叙述从简这里将不再介绍如何安装Fiddler,但是还是要提一嘴:这里博主安装的是Fiddler Classic也就是Fiddler经典版,该版本是免费的。Fiddler还有一个版本是Fiddler Everywhere这个版本,该版本的Fiddler是需要收费的,但是功能更加强大。


一、Fiddler抓包

1.1原理简介

        Fiddler是位于客户端与服务端之间的一个HTTP代理,我们通常是在客户端上使用Fiddler,所以Fiddler就是一个客户端代理;所谓代理就是我们客户端在发送请求、接收来自服务器的响应时都需要代理主机发送和接收。因此我们的代理主机就可以观察到出入客户端的所有流量,抓包不就是想要看到出入客户端的所有请求和响应吗?这就与代理的功能不谋而合了。

        所以想要“看到”报文就需要通过我们的代理主机,而部署Fiddler的主机就作为代理主机让我们来查看客户端的出入流量,这里我们的代理主机和客户端实际上是同一个,即Fiddler和客户端在同一台主机上部署。如果你愿意,你也可以尝试一下使用Fiddler来抓取来自手机端的报文,这个时候Fiddler部署在你的PC端上,客户端就相当于部署在你的手机端上,这个时候代理主机(Fiddler)和客户端主机(你的手机)就不是同一台主机了。

图1        客户端、代理、服务端三者关系

1.2抓取第一个报文

        这里推荐大家使用火狐浏览器来配合Fiddler来使用,虽然其它常见的浏览器也可以,但毕竟火狐是Fiddler官方钦定的浏览器,这一点影响也不大,随你喜欢也无妨。

        打开Fiddler之后,你需要先打开Fiddler的报文捕获功能,然后才可以接收到报文。

图2        打开Fiddler报文捕获

        这里由于博主之前就打开了,所以监控下面你也可以看到有许多的报文。打开捕捉选项之后,你只要随便找一个需要联网使用的软件就可以观察到有对应的报文被捕获了。

1.3报文分析

        抓取报文不是我们的目的,分析报文中携带的数据才是我们抓包的根本目的。Fiddler也提供了不仅可以查看报文解码后的数据,而且还为我们提供了一些非常好用的工具帮助我们分析报文,本小节将围绕Fiddler提供的辅助工具展开。

1.3.1Statistics(统计工具)

        统计工具中有关于HTTP请求的性能信息以及数据的分析。如发送/接受的字节数、发送/接收时间、阻络统计世界各地访问该服务器的时间等。

图3        统计工具提供了哪些信息?
1.3.2Inspectors(审查工具)

        Inspectors是用于查看会话的内容的,上半部分是请求的内容,下半部分是相应的内容,提供了headers、textview、hexview、Raw等多种方式查看单条HTTP请求的请求报文信息

图4        使用审查工具查看请求和响应
1.3.3AutoResponder(自动响应)

        AutoResponder可用于拦截某一请求,即按自己添加的指定规则重定向到本地的资源或Fiddler资源,从而代替服务器的响应。这种操作本质上就是代理机并没有将我们的请求发送给服务端并且返回一个代理机中预设的值。不知道各位小时候经历过想要下载A软件,但是点击下载后,下载的确实B软件。因为我们的流量最终都会转发到三大运营商(联通、电信、移动),所以他们就可以将我们的请求做更改,本来请求A,硬生生让服务商改成请求B。我们使用Fiddler实际上也可以完成这个工作。

图5        下载被劫持了

        比如,现在我添加一个规则,如果你访问CSDN,那么我就给你返回”瓦洛兰特“下载页面。

图6        修改请求返回内容

        这下再也不怕你的”好大儿“背着你偷偷刷CSDN了!当然啊,这是不可取的,这里就是开个玩笑。

        实际上,我们添加完这个规则之后,如果尝试访问一下CSDN的话就会发现,给我们返回的页面是一个残缺不全的界面,这与官方想要呈现给我们的页面大相径庭。

图7        你的官网,我的官网,好像不一样~

        这是因为,我们自动响应的页面中有很多的动态资源,正常情况下我们的请求到达服务器后,会在服务器上查询这些动态资源,但是由于我们的请求被Fiddler自动响应,Fiddler并没有去我们更改的服务器网址上获取这些资源,而是直接将这个HTML网页返回给我们,所以给我们返回的内容都是一些静态的文本资源。所以这个页面才会如此“不堪入目”。如果我们的Fiddler可以代替我们自动去请求我们更改后的请求网址,并将这个网址中的资源在服务器上一并获取返回,那么我们才可以获取一个官方想要呈现的页面。

        这种不需要经过服务端就可以返回响应的功能,叫做Mock(中文有”模拟“的意思)。Mock提供了前端页面与后端服务器之间的”挡板“服务。当客户端发送请求时,Fiddler拦截该请求,不将其转发到真是服务器,而是根据预先设置的规则返回自定义的响应数据,以此模拟后端接口的返回。当后端开发人员没有开发完成,前端开发人员可通过Fiddler mock模拟后端接口返回数据,继续进行前端工作,无需等待后端开发完成。我们也可以将可预测的后端值直接交给前端,观察前端是否能正常运行。

1.3.4Composer(自定义请求)

        Composer自定义请求发送服务器,Parsed模式下你只需要提供简单的URL地址即可。但是Composer的问题也在于只能模拟单个HTTP请求而不能像我们浏览器那样自动解析HTML文件中的内容去指定服务器获取动态资源所以使用Composer访问”瓦洛兰特“首页,其返回的内容与1.3.3返回的内容是一样的。

图8        自定义请求
1.3.5Filters(过滤器)

        在不进行过滤的情况下,Fiddler会捕捉所有的请求和响应,这通常不是我们所希望的,我们希望它能够按照一定的规则获取指定服务端通信的请求与响应。

图9        过滤器的提供功能
1.3.6Timeline(请求响应时间探查工具)

        你可以选则一个或多个请求,然后再Timeline中便会显示指定内容从服务器返回所消耗的时间

图10        查看多个任务相应的时间线

1.4Fiddler中响应图标表示的含义

图标 中文 原文
请求正在发送到服务器 Request is being sent to the server
正在从服务器读取响应 Response is being read from the server
请求在断点处暂停 Request is paused at a breakpoint
响应在断点处暂停 Response is paused at a breakpoint
请求使用了 HTTP HEAD 方法;响应不应有主体 Request used HTTP HEAD method; response should have no body
请求使用了 HTTP POST 方法 Request used HTTP POST method
请求使用了 HTTP CONNECT 方法;这建立了一个用于 HTTPS 流量的隧道 Request used HTTP CONNECT method; this establishes a tunnel used for HTTPS traffic
响应是 HTML Response was HTML
响应是一张图片 Response was an image
响应是一个脚本 Response was a script
响应是层叠样式表 Response was Cascading Style Sheet
响应是 XML Response was XML
响应是 JSON Response was JSON
响应是一个音频文件 Response was an audio file
响应是一个视频文件 Response was a video file
响应是一个 Silverlight 小程序 Response was a Silverlight applet
响应是一个 Flash 小程序 Response was a Flash applet
响应是一种字体 Response was a font
通用的成功响应 Generic successful response
响应是 HTTP/300、301、302、303 或 307 重定向 Response was HTTP/300,301,302,303 or 307 redirect
响应是 HTTP/304:使用缓存版本 Response was HTTP/304: Use cached version
响应是对客户端凭据的请求 Response was a request for client credentials
响应是服务器错误 Response was a server error
会话被客户端、Fiddler 或服务器中止 Session was aborted by the client, Fiddler, or the Server.

二、断点

        要想使用断点功能,我们需要先设置断点:Rulues-》Automatic Breakpoints-》设置断点类型。

图11        设置全局断点

        以响应后断点为例,通过这种方法设置的断点是全局的断点,这就意味着,所有的响应返回后都需要经过断点,我们这里不使用这种方式,我们采用局部断点的方式来设置断点。

在命令行中:

设置单个请求前断点:bpu url

取消所有请求前断点:bpu

设置单个响应后断点:bpuafter url

取消所有响应后断点:bpuafter

图12        使用断点

        我猜你可能会问:”断点的功能不是都可以交由自动响应完成吗?为什么还需要断点这个功能呢?“。这是因为断点和自动响应处理的场景不同,断点就有点像我们写代码调试的时候使用的,他是一个临时的解决方案,是用来解决突发情况的,但是自动响应则是为了验明程序是否可以完成需求。断点常常是线上环境状况突发时,用来快速定位问题的,自动响应则是用来测试接口或功能是否正常的。

三、弱网测试

        Fiddler一个非常与众不同的功能就是可以进行弱网测试,弱网测试的目的就是为了保证用户在网络情况不理想的时候也可以进行我们软件的使用,或者体验稍微下降但仍可以进行使用。

我们先看一下各种网络的标准:

图13        三大运营商网络划分标准

        衡量网络状况的一个标准就是上行速率和下行速率。此外,我们还需要有一个用户体验的标准,这种标准一半有两种:一种是”135“,另一种是”357“。第一种的意思是,1s内完成请求响应用户体验很好、1-3s完成请求响应用户良好、3-5s内完成请求响应用户体验一半,超出5s用户体验较差。对于第二种也是如此。

        所以根据业务,一方面服务提供者需要尽可能优化服务获取时间以保证用户留存,另一方面我们也需要反向要求用户的网络水平也要到达一定的基准才进行正常的服务获取。

        比如说你使用2G网打王者荣耀,然后嚷嚷着非常卡,这服务提供者优化的就是一坨,服务提供者也只能说”巧妇难为无米之炊啊!“

3.1如何设置弱网环境

图14        获取Fiddler脚本

首先,我们要找到相关的配置脚本,然后使用ctrl+f快速查找内容——m_SimulateModem,之后更改下图中框选的两个参数为你的预期值。对于下图中所展示的值,我们可以简单来计算一下它的上下行速率。

第一个参数表示的意思是发送1KB数据之前延时300ms,

所以每秒钟可以发送的速率为 1KB / 0.3s = 3.3KB/s,也就是说上行BPS为3.3KB

第二个参数标识的意思是接收1KB数据之前延时150mx

所以每秒钟可以接受的速率为 1KB / 0.15s = 6.6KB/s,也就是说下行BPS为6.6KB

图15        配置弱网速率

然后开启弱网限制功能,就可以实现弱网模拟了。

图16        开启弱网模拟
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐