Fiddler 抓包工具使用指北: 弱网络环境模拟限速测试流程

综合技术 2018-05-18 阅读原文

一:为什么要做弱网络测试?

实际的客户现场可能网络不稳定或者网速低,恶劣的网络环境会导致出现一些bug,影响用户体验甚至某些服务不可用。而公司内部的研发环境网络通常比较顺畅,难以复现这种bug。要解决这种问题,就需要制造弱网络的环境进行测试、复现并修复问题。

二:如何模拟恶劣网络环境?

本文仅以fiddler为例,其他的做个了解,不具体研究。

三:Fiddler怎样模拟弱网?

Fiddler 是一个 HTTP 调试代理,它能够记录所有你电脑和互联网之间的 HTTP 通讯,Fiddler 也可以让你检查所有的 HTTP 通讯,设置断点,以及修改所有的“进出”的数据(指Cookie/HTML/JS/CSS 等文件)。

利用Fiddler来模拟恶劣的网络环境,实现简单,较为直观,缺点是只能支持那些利用HTTP进行通信和交互的服务。

  • 打开fiddler,默认情况下Rules –> Performances –> Simulate Modem Speeds 是未勾选状态,网络正常。当选中此选项(模拟光猫网速)后,网速就会变很慢,打开一个网页要加载很久。这样就实现了弱网络效果。

  • 设置

    如果想了解(上传和下载)网速的具体数值,可以使用一个工具speedtest,测速方法很简单,网上有大把教程。

    http://www.speedtest.net/是英文的网站,应该是国外版,访问比较慢。而且Windows系统只支持Windows10下载客户端,我用的Windows7使用chrome浏览器要安装Speedtest扩展程序就得翻墙,所以不推荐使用。建议访问http://www.speedtest.cn/网站,测速生成结果很快且是中文的。支持手机客户端APP下载。

    四:限速原理

    Fiddler限速是以网络延迟的方式实现的,网络延迟时间*网速=传输字节数。

    • 点击Rules – Customize Rules(快捷键Ctrl + R)打开Fiddler ScriptEditor,或者直接点开右侧主页签的FiddlerScript。

    image.png

    • 打开该文件后,Ctrl + F 查找m_SimulateModem标志位,可以看到如下代码:

    if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = "300"; // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = "150"; }

    注释说明: request-trickle-delay 中的值代表每KB的数据被上传时会被延时多少毫秒; response-trickle-delay 则对应下载时每KB的数据会被延时多少毫秒。比如你要模拟上传速度100KBps的网络,那上传延迟就是1KB/100KBps=0.01s=100ms,就改成100。

    当勾选了Simulate Modem Speeds时, request-trickle-delay response-trickle-delay 就会被设置,如果本身网速已经相当快的话,这里设置的值就可以近似地推算出开启模拟后的上传和下载带宽了,比如默认设置下上传延时为300ms下载延时为150ms,可以推算出大致的模拟带宽为:

    上传带宽=(1 * 8/1000) /0.300 ≈ 0.027Mbps

    下载带宽=(1 * 8/1000) /0.150 ≈ 0.053Mbps

    实际情况下得到的带宽可能会有误差,受各种外因影响不会这么精确。

    由此可见下载带宽是上传的两倍,也就是延时越小,带宽越大。带宽和这里的延时是成反比的。

    五:调整网络环境参数

    Fiddler 默认的 Simulate Modem Speeds速度实在太慢了,而这个限速的参数是可以调整的,如果需要再快一点可以修改配置文件Fiddler2ScriptsCustomRules.js。(如若修改勿忘备份原文件)在fiddler官网http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp可以找到参考示例。

    下面提供了两种简单的修改脚本的方法,选择一种即可。

    • 方法1

    查找到if (m_SimulateModem)语句,修改代码。下面的脚本实现了一个随机延时量设置,使得网络带宽不是恒定为一个低速的值,而是会在一定范围内随机抖动:

    static function randInt(min, max) { return Math.round(Math.random()*(max-min)+min);}if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = ""+randInt(1,50); // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = ""+randInt(1,50);}
    • 方法2

    点击fiddlerScript 在代码里找到onBeforeRequest,这里定义了在发送请求前做什么。加入如下代码可以实现延迟:

    oSession["request-trickle-delay"]="3000"; //请求阶段延迟3秒oSession["response-trickle-delay"]="3000"; //响应阶段延迟3秒

    添加代码

    上面两种方法选其一,修改后保存配置文件(Ctrl+S)或者清掉缓存(Rules –> Performances –>Disable Caching),再次勾选Rules –> Performances –> Simulate Modem Speeds 进行测速。 注意:每次编辑并保存配置文件后,Simulate Modem Speeds选项会被取消,请重新勾选。

    限速完毕一定要取消勾选,不然会影响上网。像第二种方法由于请求和响应都延迟3秒,会导致访问网页很慢。

测试窝

责编内容by:测试窝阅读原文】。感谢您的支持!

您可能感兴趣的

漫画:App 防止 Fiddler 抓包小技巧! 判断当前系统是否挂代理 获取当前系统是否设置代理,可以根据不同的 Api Level,分别通过 System.getPropert...
fiddler安装及配置+利用fiddler进行简单抓包(wawayaya阅读)... 1.工欲善其事必先利其器,fiddler安装 https://www.telerik.com/fiddler 2.安装exe(无脑下一步) 3.安装...
My Blog Now Has a Content Security Policy – ... I've long been a proponent of Content Security Policies (CSPs). I've used them ...
Fiddler 抓包高级进阶篇-天罗地网抓包大法... 阅读本篇内容之前,建议先对基础熟悉下 本文内容纲要如下 喜欢的话关注收藏评论转发比心么么哒!Python学习交流企-鹅-q-u...
Linux(Debian)环境下使用Fiddler及Robo 3T 1.1 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。 由于工作使用的Debian系统,但是又要时不时的搞...