Clumsy-Windows下网络环境模拟工具

2023-10-26

下载页
http://jagt.github.io/clumsy/cn/download

项目的代码可以在github上获取,在下载页面有编译好的版本。强烈建议在使用前花点时间阅读一下文档,来 了解 clumsy 的功能和限制。

目前的实现中有一些难以绕过的限制和问题,列表如下:

回送的输入数据包(Loopback inbound packets)无法被重新注入。
仔细想想你就会发现我们没有很好的方法来区分一个回送数据包到底是被发出还是被接收到,因为它们的目标和来源 IP 地址都是本机。事实上 clumsy 底层的 WinDivert,以及其基于的 Windows Filtering Platform 把所有的回送数据包统统认为是输出 (Outbound) 数据包。这里需要记住的是,当你在本机上处理回送数据包的时候,你不能把 “inbound” 设置在 filter 条件中,最简单的方法就是在条件中简单的加上 “outbound”。另一件容易出问题的事情是,你本机的 IP 不仅仅只有 127.0.0.1 一个,还有类似路由器分配给你机器的 IP 也是属于你的本机 IP。
回送数据包会被处理两次。
因为所有的回送数据包都被认为是输出数据包,clumsy 会重复处理它们两次。一次是在发出的时候,一次是在接受到的时候。一个简单的例子是简单的把 filter 设置为 outbound,然后在 clumsy 中设置 500ms 的延迟并开启,之后在命令行里 ping localhost。这时你会发现延迟是 1000ms。当然你可以仔细的设置 filter 条件通过设置端口来只捕捉一部分的回送数据包,但是这样会比较麻烦。最简单的做法就是记住这个问题,然后设置参数的时候做相应的计算。
输入数据包的重新注入有些问题。
根据上面的描述,回送的输入包裹无法被重新注入。问题是现在有些来自包裹虽然其地址不是本机的 IP,其偶尔也会被认为是输入包裹。这种情况如果被捕捉到是无法进行重新注入的。这个问题仅仅影响非回送数据包,所以如果你仅仅是在本机上调试服务器和客户端那么是不会有这个问题的。未来版本的目标是准确的重现这个问题并进行修复。
无法根据进程来进行数据包过滤。
全系统级的数据包捕获虽然被列在了功能里,实际上是在当前的实现下,没法找到一个合适且稳定的方法来进行根据进程的数据包捕获。
如何使用

首先请根据你系统的版本(32位或64位)下载 clumsy 最新版本。注意如果你安装的是64位的系统那么一定要下载64位的 clumsy。另一件重要的事实 clumsy 需要管理员权限才能正常工作。双击打开 clumsy 的话会弹出 UAC 对话框。如果没有的话请右键点击 clumsy.exe 选择"以管理员身份运行"。如果一切正常,你应该能看到如下图的界面:
在这里插入图片描述

笔者最近因为需要在局域网内模拟一个实际情况(即存在丢包、延迟等情况)。网上搜了很多工具,大多基于linux。后来好不容易在网上搜索到一款2014年出现的网络模拟工具----Clumsy。

Clumsy是基于C语言开发的一款开源网络模拟工具。它能在Windows平台下人工造成不稳定的网络状态,应用它可以方便调试应用程序在极端网络状态下的表现。

Clumsy 首先根据用户选择的filter来拦截指定的网络数据。在 filter中可以设定你感兴趣的协议(tcp/udp),端口号,是接收还是发出的端口。你也可以通过简单的逻辑语句来进一步缩小范围。当 Clumsy 被激活时,只有符合这些标准的网络数据会被进行处理,而你不感兴趣的数据仍然会由系统正常传输。当被 filter 的网络数据包被拦截后,你可以选择 Clumsy 提供的功能来有目的性的调整网络情况,下面是Clumsy提供的功能介绍。

(1)延迟(Lag):把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况;

(2)丢包(Drop):随机丢弃一些数据;

(3)截流(Throttle):把一小段时间内的数据拦截下来后再在之后的同一时间一同发出去;

(4)重发(Duplicate):随机复制一些数据并与其本身一同发送;

(5)乱序(Out of order):打乱数据包发送的顺序;

(6)篡改(Tamper):随机修改小部分的包裹内容。

图1是Clumsy界面(此时丢包率为50%)。
在这里插入图片描述
图1:Clumsy 0.2 运行页面

在局域网(正常情况下,零丢包)环境下,通过ping测试,不同丢包率下的实际丢包率。结果如下:
在这里插入图片描述
因此从一定程度上证明了该工具的效果很好,延迟也有测试,效果明显。

ffplay -x 900 -y 720 -fflags nobuffer -max_delay 5 -i rtsp://xxxx

测试丢包10%
在这里插入图片描述

丢包50%
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clumsy-Windows下网络环境模拟工具 的相关文章

  • I2C 驱动程序应如何在 ACPI 中与 HID PRP0001 匹配

    我正在尝试实例化这个传感器 https elixir bootlin com linux v5 2 source drivers iio proximity vl53l0x i2c c在 ACPI 中使用设备特定数据 即Name DSD 并
  • 有没有办法使用 perf 工具查找流程中各个功能的性能?

    我正在尝试在流程中实现各个功能的性能 我该如何使用 perf 工具来做到这一点 还有其他工具吗 例如 假设 main 函数调用函数 A B C 我想分别获得主要功能以及功能 A B C 的性能 有没有一个很好的文档来了解 perf 源代码
  • 如何在 Raspberry Pi 上安装 PhantomJS 以便与 Python Selenium 一起使用?

    我想使用运行 Python 脚本Selenium WebDriver with PhantomJS作为我的无头浏览器树莓派运行 Raspbian 我最初在 OS X 中编写了该脚本 它运行良好 但在尝试让它在树莓派上工作时 我遇到了问题 当
  • 在 Perl 中如何接受多个 TCP 连接?

    我对 Linux 的 Perl 脚本有疑问 它的主要目的是成为 3 个应用程序之间的中间人 它应该做什么 它应该能够等待 UDP 文本 不带空格 udp port 当它收到 UDP 文本时 它应该将其转发到连接的 TCP 客户端 问题是我的
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • 使用 Shell 脚本自动安装 R-Studio

    有没有办法在 Linux 系统上自动安装 R Studio 它应该自动检测操作系统并安装具有所需依赖项的 R 和 R Studio 谢谢 我准备了以下 shell 脚本来使安装完全自动化 bin bash Program R Studio
  • cronjob 上的 PHP 错误,在提示时工作正常

    我正在 cronjob 上运行以下脚本 cd etc parselog php run all php gt dev null 并收到以下错误 05 May 2009 20 30 12 PHP Warning PHP Startup Una
  • 安装Python时出错

    击中后 make install 我收到以下错误 usr bin install cannot create regular file usr local bin python2 6 Permission denied make altbi
  • 如何禁用浮点单元(FPU)?

    我想在 x86 系统中禁用 FPU MMX SSE 指令 并且我将为设备不可用异常实现一个处理程序 我已经提到过控制寄存器 wiki 页面 http en wikipedia org wiki Control register 看来我必须在
  • -bash: /usr/bin/virtualenvwrapper.sh: 没有这样的文件或目录

    我无法弄清楚 shell 试图在哪里运行 usr bin virtualenvwrapper sh服务器登录时 我希望 virtualenvwrapper 永久卸载 而不仅仅是从 shell 实例中删除 我以为我卸载了它pip uninst
  • 执行bash脚本时如何显示行号

    我有一个测试脚本 其中有很多命令并将生成大量输出 我使用set x or set v and set e 因此当发生错误时脚本将停止 但我还是很难定位到哪一行执行停止了 从而定位问题所在 有没有一种方法可以在每行执行之前输出脚本的行号 或者
  • Linux C 如何打开目录并获取文件描述符

    include
  • `/dev/urandom` 适合模拟目的吗?

    似乎在类 Unix 系统中使用纯 C fread from dev urandom是提取高质量随机字节的最简单方法 我需要运行一个每秒需要大约 10k 32 位随机数的模拟 并且可能会运行几天 是 dev urandom可以用于此目的吗 当
  • 为什么我的 sed 命令在使用变量时失败?

    使用 bash 我尝试插入日期变量并搜索该日期的日志文件 然后将输出发送到文件 如果我像这样对日期进行硬编码 它会起作用 sed n Nov 22 2010 p file gt log file 但如果我这样做就会失败 date Nov 2
  • 调试严重的 SIGILL 崩溃:文本段损坏

    我们的系统是基于 PowerPC 的运行 Linux 的嵌入式系统 我们遇到了随机的 SIGILL 崩溃 这种情况在各种应用程序中都会出现 崩溃的根本原因是将要执行的指令归零 这表明内存中的文本段已损坏 由于文本段是以只读方式加载的 因此应
  • 当非特权用户运行 C/asm 程序时,会对 Linux 造成什么危害?

    我一直在考虑一种场景 让用户 可以是任何人 可能有恶意 提交在 Linux PC 我们称之为基准节点 上运行的代码 目标是为单线程例程创建一种自动化基准测试环境 假设一个网站向代理发布了一些代码 该代理将此代码交给基准节点 而基准节点仅与代
  • elf .rel.text 部分中 R_386_32/R_386_PC32 的含义

    为了理解重定位的概念 我编写了一个简单的 chk c 程序 如下所示 1 include
  • x86-64 Linux 中不再允许使用 32 位绝对地址?

    64 位 Linux 默认使用小内存模型 将所有代码和静态数据置于 2GB 地址限制以下 这确保您可以使用 32 位绝对地址 旧版本的 gcc 对静态数组使用 32 位绝对地址 以便节省相对地址计算的额外指令 然而 这不再有效 如果我尝试在
  • 安装pipenv导致pip3无法使用

    我安装了pipenv using pip3 install pipenv 这给了我错误ImportError cannot import name main 为了解决这个错误我遵循这些说明 https stackoverflow com q
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa

随机推荐

  • 4.3 链码的其它操作:实现对链码的打包升级

    目标 实现如何对链码打包签名 链码升级的实现 任务实现 链码部署除了正常的安装 实例化操作步骤之外 还有一种部署方式 即先将链码进行打包 然后对已打包的文件进行签名 最后再进行安装与实例的操作 4 3 1 链码打包及签名 4 3 1 1 打
  • final-期末大作业-制作AR射箭小游戏(Unity AR配置详细教程)

    要求 大作业要求 制作一款特定技术应用小游戏 并提交技术报告 内容 请参考以下技术主题 但不限于这些主题 运用手机拍若干全景图 贴到天空盒或球型天空 做一个简单校园漫游功能 粒子系统效果制作 必须带一个控制组件 控制粒子呈现效果 UI系统制
  • mysql 扁平结构设计_数组扁平化

    TOC 简介 数组的扁平化 就是将一个嵌套多层的数组 array 嵌套可以是任何层数 转换为只有一层的数组 举个例子 假设有个名为 flatten 的函数可以做到数组扁平化 效果就会如下 js var arr 1 2 3 4 console
  • Pycharm常用快捷键大全,初学友好,不怕记不住

    初来乍到 我是爱摸鱼的芝士呐 一 pycharm的简单介绍 字多可以跳过 pycharm是全宇宙最适合Python的编辑器 没有之一 个人见解勿杠杠就是你对 虽然看似全是英文 对于英语不好的小伙伴不友好 但是 不管是代码还是菜单栏 都有翻译
  • 照片转换为超声图像(MATLAB仿真)

    照片转换为超声图像 MATLAB 仿真实现 任意选取一张照片转换为超声图像 1 选取一张照片 2 将照片转换为散射点 3 进行超声成像仿真
  • Echarts formatter

    提示框浮层内容格式器 支持字符串模板和回调函数两种形式 回调函数 params Object Array ticket string callback ticket string html string gt string HTMLElem
  • 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用

    工控多年的公众号运营者 我经常分享原创技术内容 内容涉及到工业多个方面 分享新知识带你一起进步 今天看到一个例程 想再写一下威纶通触摸屏宏指令的使用 之前有分享过一篇有关威纶通关于宏指令使用的文章 那篇文章的宏只用过 GetData 指令
  • iis多进程下的全局变量_python下多线程的限制以及多进程中传递参数的方式!不来瞅瞅?...

    欢迎各位小哥哥小姐姐阅读本的文章 对大家学习有帮助 请点赞加关注哦 您的点赞和关注将是我持续更新的动力呢 v 有不懂的问题可以私聊我哦 python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁 global
  • C#桌面程序无法调试以及无法查看变量的解决办法

    作者 朱金灿 来源 clever101的专栏 为什么大多数人学不会人工智能编程 gt gt gt 一 问题描述 最近在调试一个C 桌面程序 总是无法进入调试状态 后来能进入调试状态了 却无法查看程序变量的值 二 问题解决过程 经过搜索网上资
  • python 中wheel 安装_python中wheel的用法整理

    Python的第一个主流打包格式是 egg文件 现在大家庭中又有了一个叫做Wheel whl 的新成员 wheel 被设计成包含PEP 376兼容安装 一种非常接近于磁盘上的格式 的所有文件 在本文中 我们将学习如何创建一个wheel以及如
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 几乎所有命令 命令行输入命令执行后报 bash command not found 这是由于系统PATH设置问题 PATH没有设置对 系统就无法找到精确命令了 1 在命令行中输
  • Nginx 返回自定义 text 或 json

    叙述 有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串 如果逻辑非常简单或者干脆是固定的字符串 那么可以使用nginx快速实现 这样就不用编写程序响应请求了 可以减少服务器资源占用并且响应性能非常快 解决方案 固定文本
  • 实时音频编解码之十五 Opus编码-CELT编码

    本文谢绝任何形式转载 谢谢 4 3 1 基频预滤波 对预加重之后信号预滤波 其和解码器的后滤波相反 基频周期搜索应根据以下标准优化 1 连续性 对于连续帧 基频周期通常不会突变 2 避免基频倍数 当使用的周期是实际周期的倍数时 后滤波器失去
  • 蓝桥杯真题:算式问题

    emmm其实是算全排列的问题 按照STL文档的描述 next permutation函数将按字母表顺序生成给定序列的下一个较大的排列 直到整个序列为降序为止 prev permutation函数与之相反 是生成给定序列的上一个较小的排列 具
  • 超详细!!!Linux:利用Shell脚本使用case分支语句

    case分支语句 case 语句 case语句主要适用情况 case分支语句语法结构 case值得注意的特点 case语句应用示例 1 检查用户输入字符类型 2 编写系统服务脚本 case 语句 case语句主要适用情况 某个变量存在多种取
  • Nginx+tomcat 实现前后端分离(解决跨域)

    工具 nginx 1 15 3 apache tomcat 9 0 11 代码准备 前端 新建前端文件 结构如下 index html代码如下
  • 腾讯股票数据接口 http/javascript

    From http blog csdn net ustbhacker article details 8365756 之前使用了新浪的股票数据 由于新浪http javascript缺少一些数据 用chrome自带的开发工具监视腾迅财经HT
  • 【tensorflow】张量Tensor的操作(创建,变换和分割)

    参考链接 https blog csdn net yeshang lady article details 124615743 ops request misc request id biz id 102 utm term tensorfl
  • http

    一 简单分析 简单的分析 从输入 URL到回车后发生的行为如下 URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 二 详细分析 URL解析 首先判断你输入的是一个合法的URL 还是一个待搜索的关键词 并且根据你输入
  • Clumsy-Windows下网络环境模拟工具

    下载页 http jagt github io clumsy cn download 项目的代码可以在github上获取 在下载页面有编译好的版本 强烈建议在使用前花点时间阅读一下文档 来 了解 clumsy 的功能和限制 目前的实现中有一