跨平台系统代理配置工具与库。支持 Windows、macOS 和 Linux(GNOME/KDE)。
| 平台 | 实现方式 | 特点 |
|---|---|---|
| Windows | WinINet API + RAS 枚举 | 三层通知(设置→通知→刷新);枚举所有拨号/VPN 连接逐一设置;INTERNET_PER_CONN_FLAGS_UI 兼容 Win7+,自动 fallback 旧版 |
| macOS | networksetup 命令 |
自动检测活跃网络服务;支持 HTTP/HTTPS/SOCKS 代理 |
| Linux | gsettings / kreadconfig |
同时支持 GNOME 和 KDE 桌面环境 |
# 构建 release 二进制(推荐)
make
# 构建 debug 二进制
make build-debug
# 安装到 ~/.cargo/bin
make install# 查看帮助
sysproxy --help
# 查询当前代理设置
sysproxy query
# 设置全局 HTTP 代理
sysproxy global 127.0.0.1:7890
# 设置代理 + 自定义绕过列表(macOS/Linux 用逗号分隔)
sysproxy global 127.0.0.1:7890 "localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8"
# 设置代理 + 自定义绕过列表(Windows 用分号分隔)
sysproxy global 127.0.0.1:7890 "localhost;127.*;10.*;192.168.*;<local>"
# 设置 PAC 自动代理
sysproxy pac http://127.0.0.1:1080/proxy.pac
# 关闭代理(恢复直连)
sysproxy off查询并显示当前系统代理和 PAC 自动代理设置。
输出示例:
=== System Proxy ===
Enabled : true
Server : 127.0.0.1:7890
Bypass : localhost;127.*;<local>
=== Auto Proxy (PAC) ===
Enabled : false
URL :
设置全局 HTTP 代理。
| 参数 | 说明 |
|---|---|
<server> |
代理服务器地址,格式 host:port(如 127.0.0.1:7890) |
[bypass] |
可选。代理绕过列表。Windows 使用分号 ; 分隔,macOS/Linux 使用逗号 , 分隔 |
绕过列表格式说明:
| 平台 | 分隔符 | 通配符 | 示例 |
|---|---|---|---|
| Windows | ; |
*(如 127.*) |
localhost;127.*;192.168.*;<local> |
| macOS | , |
CIDR 或域名 | localhost,127.0.0.1,192.168.0.0/16,*.local |
| Linux | , |
CIDR 或域名 | localhost,127.0.0.1,::1 |
设置 PAC 自动代理 URL。
| 参数 | 说明 |
|---|---|
<url> |
PAC 文件 URL(如 http://127.0.0.1:1080/proxy.pac) |
关闭系统代理,恢复为直连模式。
底层命令,通过标志位精确控制代理类型。适用于高级场景。
| 参数 | 说明 |
|---|---|
<flags> |
代理类型标志位(1-15),参见下表 |
[server] |
代理服务器地址(- 表示保持现有值) |
[bypass] |
绕过列表(- 表示保持现有值) |
[pac_url] |
PAC URL(- 表示保持现有值) |
标志位说明:
| 位值 | 含义 |
|---|---|
1 |
PROXY_TYPE_DIRECT — 允许直连 |
2 |
PROXY_TYPE_PROXY — 启用 HTTP 代理 |
4 |
PROXY_TYPE_AUTO_PROXY_URL — 启用 PAC 自动代理 |
8 |
PROXY_TYPE_AUTO_DETECT — 启用 WPAD 自动检测 |
标志可组合使用。常见组合:
| 组合 | flags 值 | 含义 |
|---|---|---|
| 仅直连 | 1 |
关闭所有代理 |
| 代理 + 直连 | 3 |
启用 HTTP 代理,允许绕过 |
| PAC + 直连 | 5 |
使用 PAC 自动代理 |
| PAC + 自动检测 + 直连 | 13 |
PAC + WPAD + 直连 |
示例:
# 启用代理+直连 (flags=3),设置服务器和绕过列表
sysproxy set 3 127.0.0.1:7890 "localhost;127.*"
# 仅关闭代理 (flags=1)
sysproxy set 1
# 设置 PAC+直连 (flags=5),跳过 server 和 bypass,只设 PAC URL
sysproxy set 5 - - http://example.com/proxy.pac在 Cargo.toml 中添加依赖:
[dependencies]
onebox-sysproxy-rs = { git = "https://github.com/OneOhCloud/onebox-sysproxy-rs" }use onebox_sysproxy_rs::{Sysproxy, Autoproxy};
// 查询当前代理
let proxy = Sysproxy::get_system_proxy().unwrap();
println!("Proxy enabled: {}, server: {}:{}", proxy.enable, proxy.host, proxy.port);
// 设置代理
let proxy = Sysproxy {
enable: true,
host: "127.0.0.1".to_string(),
port: 7890,
bypass: "localhost;127.*".to_string(),
};
proxy.set_system_proxy().unwrap();
// 关闭代理
let proxy = Sysproxy { enable: false, ..Default::default() };
proxy.set_system_proxy().unwrap();
// PAC 自动代理
let auto = Autoproxy {
enable: true,
url: "http://127.0.0.1:1080/proxy.pac".to_string(),
};
auto.set_auto_proxy().unwrap();/// 系统 HTTP/SOCKS 代理配置
pub struct Sysproxy {
pub enable: bool, // 是否启用
pub host: String, // 代理主机
pub port: u16, // 代理端口
pub bypass: String, // 绕过列表
}
/// PAC 自动代理配置
pub struct Autoproxy {
pub enable: bool, // 是否启用
pub url: String, // PAC 文件 URL
}| 方法 | 说明 |
|---|---|
Sysproxy::get_system_proxy() |
获取当前系统代理设置 |
Sysproxy::set_system_proxy(&self) |
设置系统代理 |
Sysproxy::is_support() |
当前平台是否支持 |
Autoproxy::get_auto_proxy() |
获取当前 PAC 设置 |
Autoproxy::set_auto_proxy(&self) |
设置 PAC 自动代理 |
Autoproxy::is_support() |
当前平台是否支持 |
make # 构建 release 二进制
make build-debug # 构建 debug 二进制
make check # 类型检查
make test # 运行测试
make test-verbose # 运行测试(显示输出)
make fmt # 格式化代码
make lint # Clippy 检查
make doc # 生成并打开文档
make install # 安装到 ~/.cargo/bin
make uninstall # 卸载
make clean # 清理构建产物
make help # 显示帮助# 为 Windows 交叉编译
make TARGET=x86_64-pc-windows-msvc
# 为 Apple Silicon 编译
make TARGET=aarch64-apple-darwin
# 为 Linux x86_64 编译
make TARGET=x86_64-unknown-linux-gnu| 变量 | 说明 |
|---|---|
RUST_LOG |
日志级别(error, warn, info, debug, trace)。设置 RUST_LOG=debug 可显示调试日志 |
src/
├── lib.rs # 公共接口(Sysproxy, Autoproxy, Error)
├── main.rs # CLI 二进制入口
├── windows.rs # Windows 实现(WinINet + RAS)
├── macos.rs # macOS 实现(networksetup)
├── linux.rs # Linux 实现(gsettings / kreadconfig)
└── utils.rs # 工具函数(CIDR → wildcard 转换)
MIT