SniShaper 是一款专为复杂网络环境设计的本地代理软件,通过 ECH 注入、TLS 分片、QUIC 转换、会话迁移 等多种协议栈技术,配合 TUN 虚拟网卡 接管全局流量,在复杂网络环境下提供稳定灵活的访问体验。
本项目为 Windows 与 Linux 双平台 仓库,共用同一套代码与版本机制,平台相关逻辑通过 Go build tags 隔离。
需要无图形界面的终端版本?本仓库内置 SniShaper CLI(
cli/目录)——跨平台(Windows / Linux / macOS)headless 版,内置 TUI 分屏界面(实时日志 + 命令面板),保留全部核心代理能力,与 GUI 共用Package.appxmanifest版本源。
- 多模式代理:MITM(中间人)、Transparent(透明)、TLS-RF(TLS 分片)、QUIC、Migration(会话迁移)、Direct(直连)等多种模式覆盖不同场景。
- TUN 虚拟网卡:Windows 走 WinTun、Linux 走 gvisor 网络栈,全局流量透明劫持,自动路由与 DNS 劫持。
- ECH 注入:自动获取并注入 ECH Config,支持 DoH 发现与热更新。
- 智能分流:基于 GFWList 自动识别被屏蔽域名,自动路由引擎无需手动配置即可分流。
- 加密 DNS:内置抗污染 DNS 解析器,支持多节点故障转移。
- Cloudflare IP 优选池:自动测速、健康检查与刷新。
- NAT64 支持:更灵活的 IP 出口和服务访问。
- 进化模式(Evolution):自动测试多种规则组合,寻找目标站点的最优访问方式并一键应用。
下载 最新版本 中的 snishaper-windows-amd64.7z(便携版)或 MSIX 安装包,解压 / 安装后运行 snishaper.exe。程序会自动请求管理员权限(TUN 模式需要),如提权失败则 TUN 功能不可用但其他功能正常。
从 最新版本 下载 snishaper-linux-amd64.tar.gz,解压后运行:
tar -xzf snishaper-linux-amd64.tar.gz
sudo ./SniShaper程序会自动申请 root 权限(TUN 模式需要),如提权失败则 TUN 功能不可用但代理等其他功能正常。当前提供 amd64 构建,基于 GTK4 + WebKitGTK 6.0(亦支持 GTK3)。
不需要图形界面、或在服务器 / SSH 环境中使用?本仓库内置 SniShaper CLI(cli/ 目录):
- 三平台支持:Windows / Linux / macOS(amd64 + arm64)。
- TUI 界面:上屏实时滚动代理日志,下屏输入命令(支持中文别名),日志刷新再快也不会淹没输入。
- 后台模式:
snishaper start常驻运行,status/stop/logs/proxy/sysproxy/tun/config/ca子命令远程管理。 - 完整核心:与 GUI 版共享同一套代理引擎(ECH 注入、TLS 分片、QUIC、TUN/gvisor、GFWList 分流、DoH、CF IP 池、NAT64、进化模式)。
- 移除更新检测:无自动更新,适合长期运行的服务器场景。
- 版本一致:与 GUI 版共用
Package.appxmanifest作为唯一版本源。
# 仓库内构建 CLI(全平台:windows/linux/darwin x amd64/arm64)
./build.sh --cli # Unix / macOS
.\build_windows.ps1 -Build backend -Cli -Silent # Windows
# 产物在 build/bin/cli/,直接运行 TUI
./build/bin/cli/snishaper-cli-linux-amd64在主界面点击「证书管理」-> 「重置根证书」。CLI 版使用 snishaper ca regenerate 后重新 ca install。
软件内置了丰富的官方规则,你也可以在「规则面板」中根据实际情况自定义规则,最后点击「启动代理」即可。
想要了解更详细的技术原理、部署教程和自定义指南,请参阅 GitHub Wiki:
- 核心模式介绍:了解 TLS-RF、QUIC 与 Server 模式的运行原理。
- 规则自定义指南:了解如何开发针对性的规则。
- 界面配置实操:了解在 GUI 快速配置规则。
- 常见问题排除:解决证书警告、规则不生效等常见问题。
本项目基于 Wails v3 + React 19 + MUI 构建,后端使用 Go。同一仓库同时产出 Windows 与 Linux 可执行文件。
# 克隆仓库
git clone https://github.com/SniShaper/SniShaper.git
cd SniShaper
# 完整编译(交互模式,自动安装依赖、可选 MSIX 打包)
powershell -ExecutionPolicy Bypass -File .\build_windows.ps1
# 或使用 PowerShell 7
pwsh -ExecutionPolicy Bypass -File .\build_windows.ps1build_windows.ps1 支持以下参数,可跳过交互式选择:
| 参数 | 可选值 | 说明 |
|---|---|---|
-Build |
frontend / backend / all |
指定构建目标 |
-Lang |
en / cn / ru |
指定界面语言 |
-InstallDeps |
无值(开关) | 安装前端 npm 依赖 |
-BuildMsix |
无值(开关) | 构建 MSIX 安装包 |
-SkipSign |
无值(开关) | 跳过 MSIX 签名,生成的文件添加 unsigned_ 前缀(需配合 -BuildMsix) |
-Silent |
无值(开关) | 静默模式,跳过所有交互提示 |
用法示例:
# 仅构建前端(中文界面)
.\build_windows.ps1 -Build frontend -Lang cn
# 仅构建后端(英文界面)
.\build_windows.ps1 -Build backend -Lang en
# 同时构建前后端,并安装依赖
.\build_windows.ps1 -Build all -Lang cn -InstallDeps
# 构建前后端并生成 MSIX 安装包(默认签名)
.\build_windows.ps1 -Build all -BuildMsix
# 构建前后端并生成未签名的 MSIX(跳过签名)
.\build_windows.ps1 -Build all -BuildMsix -SkipSign
# 静默模式(CI/CD 适用,无交互)
.\build_windows.ps1 -Silent
# 静默模式构建并打包(跳过签名)
.\build_windows.ps1 -Build all -Silent -BuildMsix -SkipSign
# 无参数 = 交互模式(原有行为)
.\build_windows.ps1Linux 构建使用统一的 build.sh(交互式菜单:GUI / CLI / 全部),在 Linux 本机(或 Windows 上的 WSL2)执行;Windows 用户只需运行 build_windows.ps1,无需关心 GTK 依赖。
# GTK4 + WebKitGTK 6.0(默认,仅 GUI 需要;CLI 构建无需 GTK)
sudo apt-get update
sudo apt-get install -y libgtk-4-dev libwebkitgtk-6.0-dev
# 或使用 GTK3 + webkit2gtk-4.1
# sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev# 克隆仓库
git clone https://github.com/SniShaper/SniShaper.git
cd SniShaper
# 交互式菜单(1 GUI / 2 CLI / 3 GUI+CLI)
./build.sh
# GUI(使用已有的 frontend/dist)
./build.sh --gui
# 先构建前端再编译 GUI
./build.sh --with-frontend
# 使用 GTK3 + webkit2gtk-4.1
./build.sh --gtk3
# 仅构建 CLI(headless,windows/linux/darwin x amd64/arm64)
./build.sh --cli
# GUI + CLI 一起构建
./build.sh --all构建产物:GUI 输出 build/bin/SniShaper(含 rules/、config/ 种子文件,TUN / 系统代理需要 root,运行时 sudo ./build/bin/SniShaper);CLI 输出 build/bin/cli/snishaper-cli-<os>-<arch>[.exe]。
版本号与发布渠道(release / beta / alpha / rc)由项目根目录的 Package.appxmanifest 统一提供:
<rel:Version>1.29.0</rel:Version>
<rel:ReleaseChannel>beta.1</rel:ReleaseChannel>Windows 与 Linux 构建均从此文件读取版本信息,并通过 ldflags 注入(snishaper/app.buildVersion、snishaper/app.buildChannel)。仓库中不存在独立的版本 JSON 文件。
Go 1.25+Node.js 24+/npm 11+- Windows:MSVC 工具链(Wails v3)、WinApp CLI(MSIX 打包)
- Linux:GTK4 / WebKitGTK 或 GTK3 开发包(见上)
- TUN 模式依赖 gvisor 网络栈(Windows 通过
with_gvisor构建 tag 启用)
构建产物:
- 前端资源位于
frontend/dist - Windows 可执行文件位于
build/bin/snishaper.exe - Linux 可执行文件位于
build/bin/SniShaper
双平台 CI 流水线:
build.yml:每次 push / PR 触发,在windows-2025上构建 Windows、在ubuntu-24.04上构建 Linux,并执行编译与二进制冒烟验证。_release_pipeline.yml:发布流水线。Windows runner 产出 MSIX 与snishaper-windows-amd64.7z便携包,Ubuntu runner 产出snishaper-linux-amd64.tar.gz,最后在 Windows runner 合并两个平台的产物并创建 GitHub Release。Release notes 优先由 runner 本地 Ollama(默认qwen3.5:2b)生成摘要;Ollama 不可用时降级为分类 commit 列表。
Windows 与 Linux 由同一仓库构建,平台相关实现通过 Go build tags 隔离(如 //go:build linux / windows)。无需再访问独立的 Linux 仓库。
CLI(headless)版本作为本仓库的 cli/ 子目录维护,与 GUI 共用同一套核心代码与版本机制(Package.appxmanifest),由 build.sh --cli / build_windows.ps1 -Cli 构建,CI 与发布流水线同时产出 GUI 与 CLI 产物。
本项目受益于以下优秀开源项目的启发:
感谢以下贡献者对本仓库的贡献:
| mechrevo | dongzheyu | JetCPP-dongle |
| lzpls |
GNU Affero General Public License v3.0(AGPL-3.0)。
