Repository navigation
Code Structure
dongle edited this page Oct 8, 2026
·
1 revision
面向贡献者与二次开发者的仓库结构说明。约定细节(命名、错误处理、i18n 规则)见仓库根目录的 AGENTS.md 与 docs/CONTRIBUTING.md。
| 层 | 技术 |
|---|---|
| 后端 | Go 1.27+,Wails v3 绑定 |
| 前端 | React 19 + TypeScript + MUI + Vite,@heroicons/react 图标 |
| 核心 | Mihomo 衍生核心进程(with_gvisor 标签构建,TUN 依赖 gVisor) |
| 打包 | Windows MSIX(PFX 签名)、跨平台 CLI 12 目标矩阵 |
SniShaper/
├── main.go # 入口:Wails 应用装配 + 托盘初始化
├── app/ # Go 后端应用层
│ ├── app_api.go # App 结构体与全部前端绑定 API
│ ├── app_system.go # 系统代理开关(注册表写入)
│ ├── autostart_*.go # 开机自启(Windows: 任务计划程序;Linux/macOS: 平台实现)
│ ├── app_tray*.go # 托盘:构建、会话监听(解锁/Explorer 重启恢复)、reshow
│ └── app_update*.go # 版本检查、下载与自更新安装
├── core/ # 核心进程管理
│ ├── core_client.go # 核心进程拉起、RPC 客户端(带 token 鉴权)
│ ├── core_api.go # 核心内 RPC 服务(Ping/Shutdown 需 token 校验)
│ ├── core_runtime.go # 核心运行时装配(TUN、证书、规则)
│ └── core_admin_*.go # 管理员提权
├── proxy/ # 代理服务器核心逻辑
│ ├── mitm.go # MITM:本地终止 TLS、SNI 伪装/ECH 出站重放
│ ├── tun_flow.go # TUN 流量接入代理服务器
│ └── rules_*.go # 规则匹配与自动路由
├── pkg/ # 独立功能包
│ ├── certmanager/ # CA 证书生成与安装
│ ├── cfpool/ # Cloudflare IP 优选池(测速/健康检查/刷新)
│ ├── dohresolver/ # DoH 解析器(多节点故障转移)
│ ├── rules/gfwlist.go # GFWList 后缀匹配(仅本地缓存文件,无网络更新)
│ ├── singtun/ # TUN 网卡管理(sing-tun 集成,gVisor 栈)
│ └── tlsfrag/ # TLS-RF 分片实现
├── evolution/ # 规则进化测试:tester、规则生成器、结果分析
├── cli/ # headless CLI(构建标签 headless)
│ ├── main.go # 入口 + 命令分发
│ ├── catalog.go # 命令目录(help 与 TUI 的单一事实来源)
│ └── tui.go # 交互面板
├── frontend/src/ # React SPA,10 个页面
│ # Dashboard、Proxies、Rules、Routing、DNS、
│ # Evolution、Logs、Settings、About、Welcome
├── common/ # 跨平台工具(打开文件/URL、路径、崩溃日志)
├── rules/config.json # 站点组规则(~3800 行):MITM/ECH/SNI 伪装配置
├── config/settings.json # 应用设置:端口、TUN、主题、Cloudflare IP 等
└── docs/ # build / Platform / 贡献指南 / 协作条款等文档
前端 (React HashRouter)
│ Wails 绑定:EventsOn 订阅 + 异步 Go 方法调用
▼
App API (app/app_api.go)
│
├──► proxy/ 代理服务器(HTTP + SOCKS5 混合端口、模式分发、规则匹配)
├──► core/ 核心进程(TUN、gVisor 栈、自动路由、DNS 劫持)
└──► pkg/ 证书 / DoH / CF 优选池 / GFWList
- 前端状态同步:后端通过
emitFrontendState()发出app:state/app:state_changed事件,前端订阅后刷新 UI。 - TUN 数据面:TUN 只做域名嗅探重建(fake-ip 反查失败时读首包嗅探 SNI),绝不改写 ClientHello —— TLS 转录哈希覆盖整个握手包,中途改字节会导致 bad record MAC;SNI 伪装只在 TLS 端点侧(MITM 出站重放)进行。
- 核心进程 RPC 隔离:核心与客户端之间用一次性 token 鉴权(
Ping/Shutdown均需校验),避免重叠实例误杀新核心。
- 全量构建:
.\build_windows.ps1 -Build all -Silent(加-BuildMsix出 MSIX 安装包) - 仅后端 / 前端:
-Build backend/-Build frontend - Go 编译检查:
go build -tags with_gvisor ./... - 前端类型检查(权威):
cd frontend && ./node_modules/.bin/tsc --noEmit - headless CLI:见 CLI 命令参考 的自建章节
- 提交信息使用英文 conventional-commit 风格(
feat:/fix:/refactor:…)。 - 新增 UI 文案必须同步补齐 zh / en / ru 三份 i18n JSON,占位符保持一致。
- 安全敏感区(证书、TUN、系统代理、核心 RPC token)改动需维护者审查;成为 collaborator 的条款见 docs/COLLABORATOR_AGREEMENT.md。