官网:http://jagt.github.io/clumsy/index.html
html
官网上的介绍已经很易懂了,因此本文只是直接翻译了官网内容。git
clumsy 能在 Windows 平台下人工形成不稳定的网络情况,方便你调试应用程序在极端网络情况下的表现。程序员
利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的形成延迟,掉包和篡改操做后再进行发送。不管你是要重现网络异常形成的程序错误,仍是评估你的应用 程序在不良网络情况下的表现,clumsy 都能让你在不须要额外添加代码的状况下,在系统层次帮你达到想要的效果:github
特点: 缓存
下载即用,不须要安装任何东西。服务器
不须要额外设置,不须要修改你的程序的代码。网络
系统级别的网络控制,能够适用于命令行,图形界面等任何 Windows 应用程序。tcp
不单单只支持 HTTP,任何 TCP, UDP 的网络链接均可以被处理。动画
支持本地调试(服务器和客户端都在 localhost)命令行
"热插拔",你的程序能够一直运行,而 clumsy 能够随时开启和关闭。
实时调节各类参数,详细控制网络状况。
下面的动画展现了 clumsy 做用于一个本地的基于 netcat 的 UDP 服务器/客户端的状况。仔细观察你能够看到数据根据在 clumsy 的影响下产生了相应的变化。
若是你基本知道了 clumsy 是干什么用的,不妨到下载页面选择适用于你系统的版本进行下载。
clumsy 首先根据用户选择的 filter 来拦截指定的网络数据。在 filter 中能够设定你感兴趣的协议(tcp/udp),端口号,是接收仍是发出的端口。你也能够经过简单的逻辑语句来进一步缩小范围。当 clumsy 被激活时,只有符合这些标准的网络数据会被进行处理,而你不感兴趣的数据仍然会由系统正常传输。
当被 filter 的网络数据包被拦截后,你能够选择 clumsy 提供的功能来有目的性的调整网络状况:
延迟(Lag),把数据包缓存一段时间后再发出,这样可以模拟网络延迟的情况。
掉包(Drop),随机丢弃一些数据。
节流(Throttle),把一小段时间内的数据拦截下来后再在以后的同一时间一同发出去。
重发(Duplicate),随机复制一些数据并与其自己一同发送。
乱序(Out of order),打乱数据包发送的顺序。
篡改(Tamper),随机修改小部分的包裹内容。
尽管当前宽带网络链接十分普及,但网络传输其自己在本质上总不是稳定的。若是你的应用程序中没有应对各类状况的处理,那么有可能一个丢失的 UDP 包裹都会让你的程序崩溃。正确的调试这类行为 显然须要再代码结构上进行仔细的设计和处理,还会很花功夫。并且在某些封装紧密的开发环境(Unity3D 自带的网络库多是一个例子)下会更麻烦。clumsy 以尽量减轻程序员负担为目标,但愿提供一个简单方便(但并不完美)的解决方案。