Mihomo SpeedTest Rust
一个快速、准确的 Clash/Mihomo 代理服务器速度测试工具,使用 Rust 编写。
特性
- 🚀 高性能: 使用 Rust 和 Tokio 异步运行时,支持并发测试
- 📊 全面测试: 延迟、抖动、丢包率、下载/上传速度测试
- 🔥 真实代理测试: 支持通过 mihomo 进程进行真实的代理性能测试
- 🔧 多格式支持: 支持 YAML、JSON 配置文件和各种订阅格式
- 🌐 协议支持: Shadowsocks、VMess、Trojan、Hysteria、SOCKS5、HTTP 等
- 📈 智能过滤: 基于性能指标自动过滤节点
- 💾 结果导出: 支持导出过滤后的配置文件和测试结果
- 🎨 美观输出: 彩色表格和 JSON 格式输出
安装
通过 Cargo 安装(推荐)
从 crates.io 直接安装最新版本:
要求: 需要安装 Rust 工具链
从源码编译
运行
# 通过 cargo install 安装后直接使用
# 或在开发环境中使用 cargo run
# 或使用编译后的二进制文件
快速开始
测试模式对比
本工具提供两种测试模式:
1. 标准模式 (默认)
- HTTP/SOCKS5: 真实代理测试
- 其他协议: 基础连通性测试(直连方式)
- 特点: 快速测试,获得基线性能指标
2. Mihomo 模式 (推荐)
- 所有协议: 通过 mihomo 进程进行真实代理测试
- 特点: 获得真实用户体验的测试结果
- 要求: 需要安装 mihomo 二进制文件
基本用法
# 标准模式测试
# 真实代理测试 (推荐)
# 快速延迟测试
# 真实代理快速测试
# 过滤高质量节点并导出
Mihomo 模式使用
首先安装 mihomo:
# macOS
# 或手动下载
然后使用 mihomo 模式进行真实测试:
# 基本真实测试
# 自定义 mihomo 配置
# 测试订阅地址
高级用法
# 并发测试多个节点
# 自定义测试参数
# JSON 输出
# 测试特定协议类型
# 测试所有 Trojan 节点
新协议测试示例
# 仅测试 Hysteria2 节点
# 测试 AnyTLS 节点性能
# 对比不同协议延迟
|
CLI 文档
完整的 CLI 使用文档请查看 CLI_DOCUMENTATION.md。
主要参数
| 参数 | 描述 | 默认值 |
|---|---|---|
--config |
配置文件路径或 URL | - |
--filter |
正则表达式过滤代理名称 | .+ |
--block |
屏蔽关键词(用|分隔) | - |
--fast |
快速模式(仅测试延迟) | false |
--timeout |
统一设置下载和上传超时(秒) | - |
--download-timeout |
下载超时时间(秒) | 10 |
--upload-timeout |
上传超时时间(秒) | 30 |
--max-latency |
最大延迟过滤(毫秒) | 800 |
--min-download-speed |
最小下载速度(MB/s) | 5 |
--min-upload-speed |
最小上传速度(MB/s) | 2 |
--max-concurrent |
最大并发测试数 | 1 |
--output |
输出文件路径 | - |
--json |
JSON 格式输出 | false |
超时参数说明
超时参数支持多种设置方式:
# 统一设置下载和上传超时为 15 秒
# 分别设置下载和上传超时
# 支持时间单位(可选)
# 纯数字默认单位:超时参数为秒,延迟参数为毫秒
参数优先级:
- 如果指定了
--timeout,将同时设置下载和上传超时 - 如果同时指定了
--timeout和--download-timeout/--upload-timeout,--timeout优先生效
Mihomo 模式参数
| 参数 | 描述 | 默认值 |
|---|---|---|
--use-mihomo |
启用 mihomo 真实代理测试 | false |
--mihomo-binary |
mihomo 二进制文件路径 | 自动检测 |
--mihomo-api-port |
mihomo API 端口 | 19090 |
--mihomo-proxy-port |
mihomo 代理端口 | 17890 |
--mihomo-config-dir |
mihomo 配置目录 | ./mihomo-temp |
API 文档
作为库使用的完整 API 文档请查看 API_DOCUMENTATION.md。
基本库使用
use ;
use Duration;
async
核心类型
ConfigLoader: 配置加载器SpeedTester: 标准速度测试引擎RealSpeedTester: Mihomo 真实代理测试引擎MihomoRunner: Mihomo 进程管理器SpeedTestResult: 测试结果ProxyConfig: 代理配置ResultFormatter: 结果格式化器ConfigExporter: 配置导出器
支持的代理协议
标准模式
完全支持(真实代理连接)
- ✅ HTTP/HTTPS - 支持基本认证,完整代理功能
- ✅ SOCKS5 - 支持用户认证,完整代理功能
基础支持(连通性测试)
- ✅ Hysteria2 - 支持配置解析和基础连通性测试
- ✅ AnyTLS - 支持配置解析和基础连通性测试
- ✅ Trojan - 支持配置解析和基础连通性测试
- ✅ Shadowsocks - 支持配置解析和基础连通性测试
- ✅ VMess - 支持配置解析和基础连通性测试
- ✅ VLESS - 支持配置解析和基础连通性测试
- ✅ WireGuard - 支持配置解析和基础连通性测试
Mihomo 模式 (推荐)
完全支持(真实代理连接)
- ✅ 所有协议 - 通过 mihomo 进程进行真实代理测试
- ✅ Shadowsocks - 完整的代理转发和性能测试
- ✅ VMess - 完整的代理转发和性能测试
- ✅ VLESS - 完整的代理转发和性能测试
- ✅ Trojan - 完整的代理转发和性能测试
- ✅ Hysteria2 - 完整的代理转发和性能测试
- ✅ AnyTLS - 完整的代理转发和性能测试
- ✅ WireGuard - 完整的代理转发和性能测试
- ✅ HTTP/HTTPS - 完整的代理转发和性能测试
- ✅ SOCKS5 - 完整的代理转发和性能测试
推荐: 使用
--use-mihomo选项获得所有协议的真实用户体验测试结果。
支持的配置格式
1. Clash YAML 配置
proxies:
# Shadowsocks
- name: "香港节点1"
type: ss
server: example.com
port: 443
cipher: aes-256-gcm
password: password123
# Trojan
- name: "美国节点1"
type: trojan
server: us.example.com
port: 443
password: trojan_password
network: ws
skip-cert-verify: true
# Hysteria2
- name: "高速节点1"
type: hysteria2
server: hy2.example.com
port: 8443
ports: 21000-26000
password: your_password
skip-cert-verify: true
# AnyTLS
- name: "AnyTLS节点1"
type: anytls
server: anytls.example.com
port: 4430
client-fingerprint: chrome
password: your_password
udp: true
tfo: true
skip-cert-verify: true
2. 订阅 URL
支持以下格式的代理 URL:
ss://- Shadowsockstrojan://- Trojanvmess://- VMess (Base64 编码的 JSON)vless://- VLESShysteria://- Hysteria (基础支持)socks5://- SOCKS5
注意: Hysteria2 和 AnyTLS 等新协议主要通过 YAML 配置文件支持。
3. Base64 编码订阅
自动检测和解码 Base64 编码的订阅内容。
测试结果示例
表格输出
┌─────────────────┬──────────┬───────────────┬───────────────┬─────────────┐
│ Proxy Name │ Latency │ Download │ Upload │ Status │
├─────────────────┼──────────┼───────────────┼───────────────┼─────────────┤
│ 香港节点1 │ 45ms │ 25.6 MB/s │ 12.3 MB/s │ ✅ Success │
│ 日本节点1 │ 78ms │ 18.9 MB/s │ 8.7 MB/s │ ✅ Success │
│ 美国节点1 │ 156ms │ 32.1 MB/s │ 15.6 MB/s │ ✅ Success │
└─────────────────┴──────────┴───────────────┴───────────────┴─────────────┘
📊 测试摘要:
✅ 成功: 3/5 (60%)
⚡ 平均延迟: 93ms
📈 平均下载速度: 25.5 MB/s
📤 平均上传速度: 12.2 MB/s
JSON 输出
配置文件
支持的环境变量
MIHOMO_CONFIG: 默认配置文件路径MIHOMO_SERVER_URL: 默认测试服务器 URLMIHOMO_TIMEOUT: 默认超时时间
配置文件示例
创建 mihomo-config.toml:
[]
= "https://speed.cloudflare.com"
= "10s"
= "500ms"
= 10.0
= 5.0
[]
= ["香港", "新加坡", "日本"]
= ["测试", "过期", "免费"]
性能优化建议
-
使用快速模式进行初步筛选
-
合理设置并发数
# 根据网络环境调整并发数 -
减少测试数据量
# 使用 MB 格式,支持小数 # 支持小数值,如 0.5 MB -
使用过滤器
故障排除
常见问题
-
代理连接失败
- 检查代理配置是否正确
- 验证网络连接
- 增加超时时间
-
配置解析错误
- 检查 YAML/JSON 格式
- 验证必需字段
- 查看详细错误信息
-
性能测试不准确
- 选择合适的测试服务器
- 避免网络高峰期测试
- 增加测试数据量
调试模式
# 启用详细输出
# 设置日志级别查看调试信息
RUST_LOG=debug
# 调试 mihomo 模式的网络问题
RUST_LOG=debug
开发
项目结构
src/
├── cli/ # CLI 模块
│ ├── args.rs # 命令行参数
│ ├── progress.rs # 进度显示
│ └── mod.rs
├── config/ # 配置模块
│ ├── loader.rs # 配置加载器
│ └── mod.rs # 配置类型定义
├── core/ # 核心模块
│ ├── speedtest.rs # 标准速度测试引擎
│ ├── real_speedtest.rs # Mihomo 真实代理测试引擎
│ ├── mihomo_runner.rs # Mihomo 进程管理器
│ ├── statistics.rs # 统计分析
│ └── mod.rs
├── network/ # 网络模块
│ ├── client.rs # 代理客户端
│ ├── latency.rs # 延迟测试
│ ├── bandwidth.rs # 带宽测试
│ └── mod.rs
├── output/ # 输出模块
│ ├── formatter.rs # 结果格式化
│ ├── export.rs # 配置导出
│ └── mod.rs
├── lib.rs # 库入口
└── main.rs # CLI 入口
运行测试
构建发布版本
贡献
欢迎提交 Issue 和 Pull Request!
开发环境要求
- Rust 1.70+
- Tokio 异步运行时
- 网络连接(用于测试)
代码规范
# 格式化代码
# 检查代码
# 运行测试
许可证
本项目采用 Apache License 2.0 许可证
致谢
- Mihomo - 代理工具
- clash-speedtest - 项目灵感来源