返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何利用Fiddler模拟恶劣网络环境
  • 216
分享到

如何利用Fiddler模拟恶劣网络环境

摘要

目录Fiddler是啥简单地利用Fiddler限速模拟恶劣网络环境调整模拟恶劣网络环境的参数编写自定义脚本Fiddler模拟恶劣网络环境的局限性总结在解决日常的支持需求中,经常会遇到

在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,而服务在面对这种恶劣的网络环境的健壮性不够,导致会出现一些意想不到的bug。而在正常的开发自测过程中很难去营造出这种恶劣的网络环境,使得这些bug较难被提前发现和修复。

另外一些服务在恶劣网络环境下虽然不会出现不可用的情况,但是用户体检很差,为了优化这个情况下的用户体验,也需要去在本地模拟这种环境来进行调优。

所以要去复现这些bug,甚至是去提前发现这些bug,就需要能够在开发环境中模拟出恶劣的网络环境,从而看到在这种恶劣的网络环境下的服务的表现等。

当前模拟恶劣网络环境主要可以通过以下这些手段实现:

  • 通过应用层或者传输层的代理服务器,通过在代理服务器上设置一些模拟恶劣网络环境的参数,使得通过这些代理服务器的流量都被转化为恶劣网络环境下的流量。如利用Fiddler,Charles等具有代理服务器功能的网络流量分析软件来实现。
  • 通过利用一些更底层的驱动层面的服务,通过控制网卡的收包发包的行为,来模拟恶劣的网络环境。如dummynet的ipfw驱动等。
  • 通过建立一个可控的网关,在网关上部署模拟恶劣环境的相关程序,所有需要借助该网关进行转发的流量都会被模拟为恶劣网络条件。linux下的netem就提供了这类支持。

通过应用层或者传输层的代理服务器,通过在代理服务器上设置一些模拟恶劣网络环境的参数,使得通过这些代理服务器的流量都被转化为恶劣网络环境下的流量。

如利用Fiddler,Charles等具有代理服务器功能的网络流量分析软件来实现。通过利用一些更底层的驱动层面的服务,通过控制网卡的收包发包的行为,来模拟恶劣的网络环境。

如dummynet的ipfw驱动等。通过建立一个可控的网关,在网关上部署模拟恶劣环境的相关程序,所有需要借助该网关进行转发的流量都会被模拟为恶劣网络条件。

Linux下的netem就提供了这类支持。

这里主要先讲的是第一种手段,即利用Fiddler来模拟恶劣的网络环境,对服务进行测试,这个手段实现简单,较为直观,但是缺点是只能支持那些利用Http进行通信和交互的服务。在之后的文章中也会进一步说一下后两种手段。

Fiddler是啥

Fiddler的官网上是这样描述它自己的:The free WEB debugging proxy for any browser, system or platfORM,即跨浏览器、跨系统、跨平台的免费Web Debug代理服务器。

当你的HTTP浏览经过Fiddler时,Fiddler可以监视流量,查看HTTP通讯的各种信息,设置断点查看和修改HTTP数据,甚至可以构造各种测试用的HTTP包以及重放已记录的包等。

其官网是http://www.fiddler2.com/fiddler2/,上面详细地介绍了Fiddler到底是什么。

简单地利用Fiddler限速模拟恶劣网络环境

Fiddler本身已经预置提供了模拟Modem速度的选项,其位置位于:

Rules – Performances – Simulate Modem Speeds

Fidder界面

  

勾选该选项后,所有通过Fiddler代理的流量都会变得和多年前的56k小猫时上网一般的慢。  

由于Fiddler只是一个HTTP代理,要直观地看出限速效果,最好是运行在浏览器中的测速工具,这里选用speedtest.net提供的测速工具进行测试。  

首先是开启该选项之前的速度:

开启前速度

打开了Simulate Modem Speeds后:

开启后速度

速度已经回到了当年那种无法忍受的低速了,注意到这里PING值也有了显著的提高,而事实上ping值是ICMP层的控制报文,并不会被Fiddler影响,理论上ping值并不会出现提高的情况,进一步分析Fiddler中的报文则可以看出端倪:

端倪

事实上网页插件并不能实现发送ICMP包并得到ping值的功能,而是用多次较小的HTTP GET请求的响应时间来计算PING值,这里实际算出来的是一个平均的HTTP的RTT值,所以受到Fiddler模拟恶劣环境的影响就是正常的了。

调整模拟恶劣网络环境的参数

直接模拟Modem速度实在是慢爆了,事实上就算是在很差信号的情况下,手机移动网络的速度都已经超过了当年的56k Modem速度了,所以采用默认的配置模拟出来的环境过于恶劣,并不一定符合需求,此时就需要对限速的参数进行调整。  

Fiddler本身就提供了一个配置文件供调整这些参数,点击:  

Rules – Customize Rules…  

就会用文本编辑器打开CustomRules.js文件,其默认位于用户目录的文档目录下的\Fiddler2\Scripts 位置,后缀名是js,其内容实质是JScript.NET——微软对ECMAScript规范的实现,与日常使用的javascript是属于同一个规范下的,但是在扩展的细节实现存在一定的不同。  

打开该文件后,可以找到一个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"
}

该标志位控制着oSession的两个参数值的设置,当勾选了Simulate Modem Speeds时,request-trickle-delay与response-trickle-delay就会被设置,其中request-trickle-delay中的值代表每KB的数据被上传时会被延时多少毫秒,response-trickle-delay则对应下载时每KB的数据会被延时多少毫秒,如果本身网速已经相当快的话,这里设置的值就可以近似地推算出开启模拟后的上传和下载带宽了,比如默认设置下下载延时为150ms,上传延时为300ms,对应可以推算出大致的模拟带宽为:

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

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

然而实际情况下却得到了两倍于这个值的带宽,推测可能是Fiddler的内部实现上有一些和描述上的不同,为何为造成这个现象现在还不是很清楚,所以上述公式最后还需要修正一个2.0的系数,即:

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

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

假设我们将两个参数都设置为50,则会得到上下载带宽均为0.32Mbps,测速结果如下所示:

设置参数以后的测速结果

编写自定义脚本

进一步地,我们可以扩展CustomRules.js里的逻辑,参照Jscript的文档可以在模拟恶劣环境中加入更多自定义的逻辑,这里实现了一个随机延时量设置,使得网络带宽不是恒定为一个低速的值,而是会在一定范围内随机抖动:

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);
}

得到的测试结果如下:

得到的测试结果

在测速过程中的瞬时速度的趋势图如下:

瞬时速度趋势图

可以看到整体的网络限速存在了一定程度的抖动。

通过进一步扩展CustionRules.js可以实现很多需要的恶劣环境模拟场景,如果场景较为复杂的话,也可以通过编写Fiddler的插件的方式,编写C#插件代码来进一步控制Fiddler的行为,在这里就不多做赘述了。

详细可以参照:http://docs.telerik.com/fiddler/extend-fiddler/extendwithdotnet

Fiddler模拟恶劣网络环境的局限性

Fiddler进行限速较为简单和灵活,配置也较为方便,但是由于它是一个应用层的HTTP的代理,只能模拟该层上的行为,对于一些复杂的网络层的丢包、重传等恶劣情况就不能很好的模拟出来,而且对于其他协议的应用也不支持,后续会介绍一些其他的模拟恶劣环境的方法和软件来弥补这些缺失。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何利用Fiddler模拟恶劣网络环境

本文链接: https://lsjlt.com/news/213721.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何利用Fiddler模拟恶劣网络环境
    目录Fiddler是啥简单地利用Fiddler限速模拟恶劣网络环境调整模拟恶劣网络环境的参数编写自定义脚本Fiddler模拟恶劣网络环境的局限性总结在解决日常的支持需求中,经常会遇到...
    99+
    2023-05-19
    Fiddler模拟恶劣网络环境 Fiddler网络环境 Fiddler模拟网络环境
  • Cacti系统适用于哪些规模的网络环境
    Cacti系统适用于中小规模的网络环境,通常用于监控数十到数百台设备的网络。它可以很好地管理和监控这些设备的性能、流量以及各种指标,...
    99+
    2024-03-12
    Cacti
  • 如何利用zabbix监控php环境
    本篇内容介绍了“如何利用zabbix监控php环境”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vim&n...
    99+
    2024-04-02
  • 如何配置虚拟机NAT模式网络
    这篇文章给大家分享的是有关如何配置虚拟机NAT模式网络的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。NAT模式配置网络虚拟机中有三种网络模式:桥接共享主机NAT模式本次讲NAT模式配置网络NAT模式网络连接结构:...
    99+
    2023-06-04
  • Golang 函数测试中如何模拟真实环境?
    go 函数测试中模拟真实环境的方法:依赖项注入:使用测试双打替换真实依赖项,隔离函数并控制输入。docker 容器:在隔离环境中运行代码,设置确切的依赖项和配置,访问真实的外部服务。 ...
    99+
    2024-04-16
    golang 函数测试 redis docker
  • 租用网站服务器如何预防恶意网络攻击
    租用网站服务器预防恶意网络攻击的方法:1、需要改善网站服务器的密钥管理,防止被黑客轻易破解利用;2、需要做好网站服务器数据备份操作,防止数据丢失无法恢复;3、需要给网站服务器安装防火墙,降低服务器被攻击的风险以及提高服务器防御能力;4、给网...
    99+
    2024-04-02
  • python虚拟环境中如何使用virtualenv
    这篇文章主要为大家展示了“python虚拟环境中如何使用virtualenv”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python虚拟环境中如何使用virtualenv”这篇文章吧。virt...
    99+
    2023-06-02
  • 如何在Python中使用虚拟环境
    在Python中使用虚拟环境可以帮助您管理项目所需的依赖项,避免与系统中其他Python项目的冲突。以下是在Python中使用虚拟环...
    99+
    2024-05-10
    Python
  • 怎么在Java中利用网络编程模拟在线聊天
    本篇文章为大家展示了怎么在Java中利用网络编程模拟在线聊天,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、前提知识需要知道简单的IO流操作,以及简单的UDP发送数据包的原理。需要用到的类:Dat...
    99+
    2023-06-15
  • 云服务器如何配置环境设置的网络
    添加IP地址:将服务器的IP地址添加到网络配置文件中,例如使用IPv4协议。 添加MAC地址:为服务器添加一个唯一的MAC地址,这样可以限制外部网络设备访问服务器。 配置网络接口:为服务器的网络接口指定网络协议(例如TCP和UDP),例如...
    99+
    2023-10-27
    环境 服务器 网络
  • 如何利用Docker搭建本地https环境
    这篇文章将为大家详细讲解有关如何利用Docker搭建本地https环境,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是 https我们都知道 web app 的运行都是建立在网络应用层 http 协议...
    99+
    2023-06-07
  • Python虚拟环境virtualenv是如何使用的
    了解虚拟环境 如果在一台机器上,想开发多个不同的项目,需要用到同一个包的不同版本,如果还使用上面的命令,在同一个目录下安装或者更新,其它的项目必须就无法运行了,怎么办呢? 解决方案...
    99+
    2024-04-02
  • 如何使用Zabbix监控虚拟机环境
    要使用Zabbix监控虚拟机环境,您需要安装Zabbix代理程序在每个虚拟机中,并配置Zabbix服务器来监视这些代理程序。以下是一...
    99+
    2024-04-09
    Zabbix
  • 利用Java+Selenium+OpenCV模拟如何实现网页滑动验证
    本篇文章给大家分享的是有关利用Java+Selenium+OpenCV模拟如何实现网页滑动验证,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。目前很多网页都有滑动验证,目的就是防...
    99+
    2023-06-26
  • 如何在VirtualBox中设置虚拟机的网络模式
    在VirtualBox中,可以设置虚拟机的网络模式以便虚拟机能够与主机机器或其他虚拟机进行网络通信。以下是在VirtualBox中设置虚拟机的网络模式的步骤: 打开VirtualBox并选择要设置网络模式的虚拟机。 点击虚拟机菜单栏...
    99+
    2024-06-11
    virtualbox
  • 如何在pycharm中使用anaconda的虚拟环境
    最近项目中有许多同学咨询如何在pycharm中使用anaconda的虚拟环境(envs),这里就给大家简单介绍一下。 首先我们需要安装anaconda,这里就不在追述了,网上安装教程非常多。anaco...
    99+
    2023-09-30
    python 开发语言 后端 pycharm ide
  • 使用厦门服务器被恶意网络攻击如何处理
    使用厦门服务器被恶意网络攻击处理的方法:1、检查服务器的日志信息,通过分析找出可疑的信息并进行修补;2、如果无法彻底清除服务器上的攻击源,可以选择重装系统来进行处理;3、被网络攻击后,需要对服务器的程序以及系统漏洞进行检查,一旦发现必须立刻...
    99+
    2024-04-02
  • 如何利用Eclipse构建Spark集成开发环境
    如何利用Eclipse构建Spark集成开发环境,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用Maven编译生成可直接运行在Hadoop ...
    99+
    2024-04-02
  • Ubuntu 11.10如何利用终端环境备份还原
    这篇文章主要介绍Ubuntu 11.10如何利用终端环境备份还原,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!流程: 搭建TFTP Server服务,并保持开启状态~ 备份和还原ASA配置文件 备份和还原ASA IO...
    99+
    2023-06-16
  • 如何利用LNMP环境安装SMF论坛程序
     SMF 是目前流行的论坛解决方案,它提供了各种功能。通过模块化设计和灵活性,用户可以创建自己的插件,以任何他们希望的方式修改SMF的插件。在开始之前,一定要遵循入门指南中列出的步骤。你还需要一个LAMP 栈。提示:本指南是为非根...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作