弱网罗测试工具clumsy
clumsy 能在 Windows 平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况下的表现。
简介
利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果:
特色
- 下载即用,不需要安装任何东西。
- 不需要额外设置,不需要修改你的程序的代码。
- 系统级别的网络控制,可以适用于命令行,图形界面等任何 Windows 应用程序。
- 不仅仅只支持 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 以尽可能减轻程序员负担为目标, 希望提供一个简单方便(但并不完美)的解决方案。
如何使用
首先请根据你系统的版本(32位或64位)下载 clumsy 最新版本。注意如果你安装的是64位的系统那么一定要下载64位的 clumsy。另一件重要的事实 clumsy 需要管理员权限才能正常工作。双击打开 clumsy 的话会弹出 UAC 对话框。如果没有的话请右键点击 clumsy.exe 选择"以管理员身份运行"。如果一切正常,你应该能看到如下图的界面:
根据上图中的数字图标顺序:
- Filter。详细的 filter 语法在下一部分有仔细的讲解。但是简单的讲它跟你常见的编程语言中的 if 中的条件写法几乎一样。数据包将根据这个标准被拦截。
- 预设 Filte。这里提供了一系列内置的预设 Filter 供你使用。你可以通过参考他们来写你自己需要的 Filter,也可以把你发现常用的 filter 写到 clumsy.exe 所在文件夹下的 config.txt 中。
- 开始/结束 按钮。点击此按钮 clumsy 就会开始捕捉数据包。在某些情况下,比如提供的 filter 语法有问题 clumsy 无法正常开始工作。请参考底部的提示进行操作。如果一切正常按钮上的文字会变为 "Stop",按下就会停止捕捉包裹,系统网络会恢复正常。按钮左边有一个小图标,每当数据包被捕获的时候它会变绿,当包裹重新注入失败的时候它会变红色。这时你应该考虑是否遇到了上面限制中提到的问题。另外需要提到的是开启和结束可以随时进行并实时生效。
- 功能控制。勾选功能对应的选框来开启对应的功能。每个功能左边也有一个小图标,其起作用的时候就会变绿。在数据包捕获开启的状态下,你可以实时开启/关闭任何功能,它们都会即时生效。
- 参数控制。对每个功能,都附有对应的参数控制控件让你进行详细的配置。其中最常见的有:
- Inbound/Outbound: 是否处理输入/输出数据包。这里在 filter 的控制之外额外提供一个选择的机会,并且也可以在实时生效。
- Chance: 功能生效的概率。显然你需要把它们设置在一个合理的范围内才不会让网络在可以接受的范围内劣化。
- 状态。显示 clumsy 当前状态的帮助信息。
手机如何模拟弱网:
电脑上设置好网络后,如果是笔记本,可以直接开个WIFI手机连;如果是PC,可以买个小米WIFI或360WIFI,然后手机连接。这样手机的网就和电脑上一样了。下载地址:http://jagt.github.io/clumsy/cn/download.html