9 个版本 (5 个破坏性更新)
新版本 0.6.1 | 2024 年 8 月 21 日 |
---|---|
0.6.0 | 2024 年 8 月 20 日 |
0.5.0 | 2024 年 8 月 7 日 |
0.4.2 | 2024 年 8 月 5 日 |
0.1.0 | 2024 年 7 月 31 日 |
#79 in 测试
每月 792 次下载
180KB
4K SLoC
fumble
fumble 是原始笨拙工具的氧化(基于 Rust)实现,旨在在 Windows 系统上模拟不利网络条件。利用 WinDivert 库的强大功能,fumble 可以截获实时网络数据包,并允许用户对这些数据包引入可控的延迟、丢弃、重复和修改。此工具对于调试网络相关错误、测试应用程序在恶劣网络条件下的健壮性以及评估不可靠网络环境中的性能非常有价值。
与前辈一样,fumble 提供了一种用户友好且交互式的方法来有意降低网络性能,从而更容易诊断问题并提高依赖网络的程序的健壮性。无论是需要模拟不稳定连接的开发者还是进行应用程序压力测试的 QA 工程师,fumble 都提供了一种灵活且可靠的解决方案。
特性
数据包操作特性
- 数据包过滤:使用过滤表达式捕获特定数据包。
- 数据包丢弃:以指定概率丢弃数据包。
- 数据包延迟:引入延迟以模拟延迟。
- 数据包节流:暂时保留或丢弃数据包以模拟断断续续的网络节流。
- 数据包重排:通过应用随机延迟重新排列数据包以模拟乱序交付。
- 数据包篡改:通过更改、翻转或注入数据修改数据包有效载荷以模拟损坏的传输。
- 数据包重复:重复数据包以模拟数据包重复问题。
- 带宽限制:限制带宽以模拟受限的网络环境。
二进制特性
- 通用命令行界面使用方法:利用全面的命令行界面,灵活且详细地控制网络操作设置。轻松指定数据包筛选、丢弃、延迟、限速、重排序、篡改、复制和带宽限制的参数。
- 配置支持:通过配置文件轻松管理设置。创建、列出和使用配置文件来保存和加载您首选的设置,简化设置并确保在不同运行之间的一致行为。
- 文本用户界面(TUI)模式:为偏好交互式和视觉界面的用户提供文本用户界面(TUI)。TUI 提供了一种更用户友好的方式来实时配置和管理网络操作设置。
路线图
- TUI/CLI增强:增强文本用户界面(TUI),提供 fumble 应用网络流量和所有修改的图形可视化。
- 图形用户界面(GUI):为不使用命令行的用户提供图形用户界面。
要求
重要: fumble
需要 WinDivert.dll
和 WinDivert64.sys
来正常工作。您可以从 官方 WinDivert 发布页面 下载它们。
安装 WinDivert
- 下载
WinDivert.dll
和WinDivert64.sys
的最新版本。 - 将
WinDivert.dll
和WinDivert64.sys
放在fumble
二进制可执行文件的同一目录中,或将包含这些文件的目录添加到系统PATH
环境变量中。
安装
从源码安装
要构建 fumble
,请确保您已安装 Rust 和 Cargo。
克隆仓库并使用 Cargo 构建项目
git clone https://github.com/bornacvitanic/fumble.git
cd fumble
cargo build --release
为确保正常功能,将 WinDivert.dll 和 WinDivert64.sys 放在 fumble 二进制文件同一目录中(通常是 ./target/debug
或 ./target/release
)。或者,您可以将包含这些文件的目录添加到系统 PATH
环境变量中。
从 GitHub 发布版
您可以从 GitHub 发布版页面 下载预构建的二进制文件
- 下载适合您平台的相关发布版。
- 从发布版归档中提取文件。
发布版归档已包含 WinDivert.dll
和 WinDivert64.sys
文件的副本。
作为 CLI 从 crates.io 安装
要全局安装 fumble 作为命令行工具,使用以下命令
cargo install fumble
这将安装 fumble 二进制文件,使您能够全局使用 CLI 工具。安装后,请确保 WinDivert.dll
和 WinDivert64.sys
与 fumble 二进制文件在同一目录中(通常位于 Windows 的 C:\Users\username\.cargo\bin
)。或者,您可以将包含这些文件的目录添加到系统 PATH
环境变量中。
将 fumble 作为库使用
要将 fumble
包含为 Rust 项目的依赖项,请将以下内容添加到您的 Cargo.toml
[dependencies]
fumble = "0.6.0"
运行 cargo build 以下载和编译软件包。
为确保正常功能,将 WinDivert.dll 和 WinDivert64.sys 放在 fumble 二进制文件同一目录中(通常是 ./target/debug
或 ./target/release
)。或者,您可以将包含这些文件的目录添加到系统 PATH
环境变量中。
使用方法
使用所需选项运行 fumble
可执行文件
fumble --filter "inbound and tcp" --delay-duration 500 --drop-probability 0.1
TUI 模式
fumble 为那些希望有更多交互式体验的用户提供文本用户界面(TUI)模式。TUI 允许您在视觉界面中查看、配置和管理网络操作设置,便于动态调整设置。您可以通过配置或常规 CLI 命令初始化 TUI。
启动 TUI
要在文本用户界面(TUI)模式下启动 fumble
,请使用以下命令:
fumble -t
进入TUI后,您可以使用键盘浏览不同的设置。TUI提供实时反馈,允许您快速调整配置。
您可以从配置的单独命令或初始化TUI的默认值。您还可以指定一个初始过滤器。
fumble --filter "outbound and udp" -t
fumble --filter "outbound and udp" --delay-duration 500 -t
fumble --filter "inbound and udp" --use-config config_name -t
命令行选项:
-f, --filter <FILTER>
:用于捕获数据包的过滤器表达式。--drop-probability <drop-probability>
:丢弃数据包的概率,范围从0.0到1.0。--delay-duration <delay-duration>
:为每个数据包引入的延迟(以毫秒为单位)。--throttle-probability <throttle-probability>
:触发节流事件的概率,范围从0.0到1.0。--throttle-duration <throttle-duration>
:应用节流的时间(以毫秒为单位)。- 默认值:
30
- 默认值:
--throttle-drop
:指示是否应该丢弃节流的数据包。--reorder-probability <reorder-probability>
:重新排序数据包的概率,范围从0.0到1.0。--reorder-max-delay <reorder-max-delay>
:在重新排序数据包时应用的最大随机延迟(以毫秒为单位)。- 默认值:
100
- 默认值:
--tamper-probability <tamper-probability>
:篡改数据包的概率,范围从0.0到1.0。--tamper-amount <tamper-amount>
:应应用篡改的量,范围从0.0到1.0。- 默认值:
0.1
- 默认值:
--tamper-recalculate-checksums <tamper-recalculate-checksums>
:指示篡改的数据包是否应该重新计算校验和以隐藏篡改并防止数据包被自动丢弃。- 可能的值:
true
,false
- 可能的值:
--duplicate-probability <duplicate-probability>
:复制数据包的概率,范围从0.0到1.0。--duplicate-count <duplicate-count>
:每个数据包复制的次数。- 默认值:
1
- 默认值:
--bandwidth-limit <bandwidth-limit>
:最大带宽限制(以KB/s为单位)。-t, --tui
:启动文本用户界面(TUI)。-h, --help
:打印帮助信息(查看摘要请使用-h
)。
配置管理:
--create-default <CREATE_DEFAULT>
:用于创建具有指定名称的默认配置文件的命令。--use-config <USE_CONFIG>
: 使用基于指定名称的现有配置文件的命令。--list-configs
: 列出所有可用的配置文件。
示例
-
丢弃10%的传入TCP数据包
fumble --filter "inbound and tcp" --drop-probability 0.1
-
延迟数据包500毫秒
fumble --filter "inbound and tcp" --delay-duration 500
-
以10%的概率限制数据包30毫秒并丢弃它们
fumble --filter "inbound and tcp" --throttle-probability 0.1 --throttle-duration 30 --throttle-drop
-
以20%的概率限制数据包50毫秒并延迟它们
fumble --filter "inbound and tcp" --throttle-probability 0.2 --throttle-duration 50
-
以10%的概率重新排序数据包,最大延迟100毫秒
fumble --filter "inbound and tcp" --reorder-probability 0.1 --reorder-max-delay 100
-
以25%的概率篡改数据包,篡改量为0.2,重新计算校验和
fumble --filter "inbound and tcp" --tamper-probability 0.25 --tamper-amount 0.2 --tamper-recalculate-checksums true
-
以30%的概率篡改数据包,不重新计算校验和
fumble --filter "inbound and tcp" --tamper-probability 0.3 --tamper-recalculate-checksums false
-
以50%的概率复制数据包
fumble --filter "inbound and tcp" --duplicate-probability 0.5 --duplicate-count 2
-
限制带宽为100 KB/s
fumble --filter "inbound and tcp" --bandwidth-limit 100
日志记录
该工具使用env_logger crate进行日志记录。默认情况下,显示信息消息。
启用详细日志
要查看更多详细日志,在运行fumble
之前设置RUST_LOG
环境变量。
贡献
欢迎贡献!请打开一个问题或提交一个拉取请求。
许可证
本项目受MIT许可证许可 - 有关详细信息,请参阅LICENSE文件。
致谢
- clap - 一个用于Rust的命令行参数解析器,它提供了一个简单且强大的API来定义复杂的CLI界面。
- windivert - WinDivert库的Rust绑定,用于网络数据包拦截和处理。
- rand - 一个用于生成随机数的Rust库,用于实现随机数据包丢弃和复制。
- ratatui - 一个Rust库,用于构建终端用户界面,强调简单性和易用性。
- tui-textarea - 一个用于在终端用户界面中管理文本输入的Rust crate。
- lazy_static - 一个Rust宏,用于定义计算懒惰的静态初始化变量。
- ctrlc - 一个用于处理Ctrl-C信号的Rust库,启用优雅的关闭和干净的线程终止。
- regex - 一个用于正则表达式的Rust库,用于字符串匹配操作。
- env_logger - 一个简单的Rust应用程序日志记录器,可以通过环境变量进行配置。
- log - 一个提供各种日志实现的通用接口的日志外观。
- serde - 用于配置文件的序列化和反序列化。
- toml - 用于解析和序列化TOML配置文件。
- dirs - 用于处理跨不同操作系统的配置目录。
- thiserror - 用于健壮的错误处理。
联系
- 电子邮件: [email protected]
- GitHub问题: GitHub问题页面
依赖项
~152MB
~2.5M SLoC