# myproxy **Repository Path**: yuanlidi/myproxy ## Basic Information - **Project Name**: myproxy - **Description**: MyProxy 是一款轻量级的 SOCKS5 代理服务器软件,运行于 Windows 平台。它将标准 SOCKS5 协议栈与可视化运维面板结合,一键启停、实时监控连接状态、黑白名单控制、流量统计,适用于跨网段穿透、安全审计、开发调试、出口统一等多种场景。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-29 - **Last Updated**: 2026-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🦊 MyProxy **SOCKS5 代理服务管理工具 | Windows 原生桌面应用** 仓库地址:[gitee.com/yuanlidi/myproxy](https://gitee.com/yuanlidi/myproxy) MyProxy 是一款轻量级的 SOCKS5 代理服务器软件,运行于 Windows 平台。它将标准 SOCKS5 协议栈与可视化运维面板结合,一键启停、实时监控连接状态、黑白名单控制、流量统计,适用于跨网段穿透、安全审计、开发调试、出口统一等多种场景。 --- ## 功能特性 ### 代理核心 | 功能 | 说明 | |------|------| | SOCKS5 代理 | 完整实现 RFC 1928,支持 TCP CONNECT + UDP ASSOCIATE | | 代理端 DNS | hostname 模式,DNS 由代理服务器解析,客户端无需配置 DNS | | 用户认证 | 可选 RFC 1929 用户名/密码认证 | | 上游代理 | 支持 SOCKS5 / HTTP 上游代理级联 | | 监听地址 | 可配置代理绑定 IP(自动检测 / 127.0.0.1 / 0.0.0.0 / 自定义) | | 端口可配 | 默认端口 7890,可视化修改 | ### 运维面板 | 模块 | 功能 | |------|------| | 仪表盘 | 一键启停、实时速率、活跃连接数、流量趋势图 | | 实时连接 | 来源/目标/时长/流量一目了然,支持强制断开 | | 访问日志 | 完整记录每次代理请求,支持搜索、导出 | | 黑白名单 | IP CIDR / 域名通配符规则,Deny优先/Allow优先两种策略 | | 系统设置 | 代理地址/端口、认证、上游代理、托盘、日志策略集中管理 | | 系统托盘 | 最小化/关闭隐藏到托盘;**左键**恢复窗口,**右键**弹出菜单 | ### 安全性 - ACL 黑白名单:支持来源 IP、目标 IP 段 (CIDR)、域名通配符 (`*.internal`) - 可选的用户认证(RFC 1929 用户名密码验证) - 代理绑定地址可配置:默认自动检测本机 IP;也可仅本机 (`127.0.0.1`) 或全网卡 (`0.0.0.0`) --- ## 技术栈 | 层级 | 技术 | |------|------| | 桌面框架 | Wails v2.12 | | 后端语言 | Go 1.22 | | 前端框架 | React 18 + TypeScript | | UI 组件库 | Arco Design | | 样式方案 | TailwindCSS | | 代理协议 | SOCKS5 (RFC 1928) | | 安装程序 | Inno Setup / NSIS | | 目标平台 | Windows 10+ (amd64) | --- ## 快速开始 ### 系统要求 - Windows 10 / 11 64 位 - 无需额外运行时(Go 编译为独立 exe) ### 下载安装 1. 前往 [Releases](https://gitee.com/yuanlidi/myproxy/releases) 下载最新安装包 `MyProxy-Setup-v1.0.0.exe` 2. 双击运行安装向导,按提示完成安装 3. 安装完成后自动启动,或在桌面 / 开始菜单打开 MyProxy ### 使用代理 1. **B 机器上**:打开 MyProxy → **系统设置** 配置代理地址与端口 → 点击「启动服务」 2. **A 机器上**:设置 SOCKS5 代理为仪表盘显示的 **代理地址**(如 `192.168.1.5:7890`) > 代理地址在「系统设置 → 代理服务」中配置。留空为自动检测本机 IP;`0.0.0.0` 表示监听所有网卡。修改后需重启代理服务。 **浏览器代理设置:** ``` Chrome/Edge: 设置 → 系统 → 打开计算机的代理设置 → 手动设置代理 → SOCKS5 代理: B机器IP, 端口: 7890 Firefox: 设置 → 网络设置 → 手动代理配置 → SOCKS 主机: B机器IP, 端口: 7890 → ☑ SOCKS v5 → ☑ 使用 SOCKS v5 时代理 DNS 查询 ``` **命令行工具:** ```bash # curl 通过代理访问 curl --socks5-hostname B机器IP:7890 http://目标地址 # ssh 通过代理连接 ssh -o ProxyCommand="nc -X 5 -x B机器IP:7890 %h %p" user@目标机器 ``` **Python 代码:** ```python import requests proxies = {'http': 'socks5h://B机器IP:7890', 'https': 'socks5h://B机器IP:7890'} response = requests.get('http://目标地址', proxies=proxies) ``` ### 典型场景 ``` ┌─ A 机器(受限网段)──────┐ ┌─ B 机器(Windows)────────────────────┐ │ │ │ │ │ 浏览器 / curl / 应用程序 │ │ MyProxy 桌面应用 │ │ SOCKS5 → B:7890 │──────→│ 监听 本机IP:7890(地址可在设置中配置) │ │ │ │ │ │ DNS 在 B 端解析 │ │ ── B 可访问目标网络 ──→ 任意目标机器 │ └───────────────────────────┘ └───────────────────────────────────────┘ ``` --- ## 安装包打包 版本号统一由 `build/version.txt` 管理(当前 `1.0.0`),构建脚本会自动同步到 `versioninfo.json` 与安装包文件名。 ### 前置工具 ```powershell # Go 1.22+ winget install GoLang.Go # Node.js 18+ winget install OpenJS.NodeJS # Wails CLI v2(使用 wails build 时需要) go install github.com/wailsapp/wails/v2/cmd/wails@latest # 安装包工具(二选一即可) winget install JRSoftware.InnoSetup # Inno Setup(推荐) # 或 choco install nsis # NSIS(本机已装 NSIS 时 build.ps1 可自动回退) # goversioninfo(build.ps1 嵌入 exe 图标/版本信息,脚本会自动 go install) ``` ### 方式一:build.ps1(推荐,一键全量) ```powershell cd myproxy # 完整构建:前端 + Go 程序 + 安装包(默认不打包,加 -Installer 参数) .\build\build.ps1 -Installer NSIS # Inno Setup 安装包(需已安装 ISCC.exe;未安装时自动尝试 NSIS) .\build\build.ps1 -Installer InnoSetup # 仅编译 exe,不打包 .\build\build.ps1 -Installer None # 跳过前端(已有 frontend/dist 时) .\build\build.ps1 -SkipFrontend -Installer None # 清理后全量重建 .\build\build.ps1 -Clean -Installer NSIS ``` **build.ps1 构建产物(项目根目录):** ``` myproxy.exe # 主程序(GUI,前端已 embed,无控制台窗口) MyProxy-Setup-v1.0.0.exe # Windows 安装包(需 NSIS 或 Inno Setup) ``` > 安装包生成在项目**根目录**,文件名格式 `MyProxy-Setup-v{版本号}.exe`。若 Inno Setup 未正确安装(`ISCC.exe` 不存在),脚本会提示并自动尝试 NSIS。 ### 方式二:wails build ```powershell # 推荐:自动清理冲突的 .syso 并构建 .\build\wails-build.ps1 # 或手动(必须先删除 resource.syso,否则会报 too many .rsrc sections) Remove-Item .\resource.syso -ErrorAction SilentlyContinue wails build -tags production -ldflags "-H=windowsgui -s -w" ``` **wails build 产物:** ``` build\bin\myproxy.exe ``` ### 两种构建方式的区别 | 方式 | 命令 | 输出路径 | 说明 | |------|------|----------|------| | build.ps1 | `.\build\build.ps1` | `./myproxy.exe` | 使用 goversioninfo 嵌入图标;可打安装包 | | wails build | `.\build\wails-build.ps1` | `./build/bin/myproxy.exe` | Wails 官方构建流程 | > **注意**:`build.ps1` 会生成 `resource.syso`,`wails build` 会生成 `myproxy-res.syso`。两者不能同时留在项目根目录,否则链接报错 `too many .rsrc sections`。使用 `wails-build.ps1` 会自动清理。 ### 图标 构建脚本会自动生成 `build/app.ico` 并同步到 `build/windows/icon.ico`(供 wails 使用)。也可手动转换: ```powershell # 需 ImageMagick .\build\generate-icon.ps1 # 或在线:https://convertio.co/svg-ico/ # 上传 build\app.svg → 下载为 build\app.ico ``` --- ## 安装教程 ### 安装步骤 1. **下载安装包**:双击 `MyProxy-Setup-v1.0.0.exe` 2. **安装向导**:选择安装语言(中文 / English) 3. **许可协议**:阅读并接受 MIT 许可证 4. **选择目录**:默认 `C:\Program Files\MyProxy`,可按需修改 5. **选择组件**: - ☑ MyProxy 主程序(必选) - ☐ 开机自启(可选) 6. **开始安装**:点击「安装」,等待进度条完成 7. **完成**:勾选「启动 MyProxy」→ 点击「完成」 ### 安装后目录 ``` C:\Program Files\MyProxy\ ├── myproxy.exe # 主程序(前端已编译进 exe,单文件运行) ├── app.ico # 图标 ├── uninstall.exe # 卸载程序 ├── data\ │ └── settings.json # 用户配置(首次启动自动生成) └── logs\ └── access_*.jsonl # 访问日志(需在设置中开启) ``` > 注意:安装包只包含 `myproxy.exe` 和 `app.ico` 两个文件。前端页面通过 Go 的 `go:embed` 编译期嵌入到 exe 中,无需任何额外文件即可运行。 ### 卸载 - **方式一**:控制面板 → 程序和功能 → MyProxy → 卸载 - **方式二**:开始菜单 → MyProxy → 卸载 MyProxy - **方式三**:运行 `C:\Program Files\MyProxy\uninstall.exe` 卸载会自动停止运行中的代理服务并清理所有文件。 --- ## 项目结构 ``` myproxy/ ├── .gitignore # Git 忽略规则(构建产物、依赖、运行时数据等) ├── LICENSE # MIT 许可证 ├── README.md ├── wails.json # Wails 项目配置 ├── main.go # Wails 应用入口 ├── go.mod / go.sum # Go 模块依赖 │ ├── internal/ │ ├── app.go # Go ↔ React 绑定层 │ ├── tray/ # 系统托盘(Windows) │ ├── proxy/ # SOCKS5 核心实现 │ │ ├── server.go # 代理服务器 │ │ ├── handler.go # 连接处理(协商/认证/转发) │ │ ├── listen.go # 监听地址解析 │ │ ├── udp.go # UDP ASSOCIATE │ │ ├── dns.go # DNS 解析 │ │ ├── upstream.go # 上游代理(SOCKS5 + HTTP) │ │ └── config.go # 代理配置 │ ├── acl/ # 黑白名单引擎 │ ├── tracker/ # 连接追踪 & 流量统计 & 日志 │ └── setting/ # 配置持久化(JSON) │ ├── frontend/ │ ├── src/ │ │ ├── pages/ │ │ │ ├── Dashboard.tsx # 仪表盘 │ │ │ ├── Connections.tsx # 实时连接 │ │ │ ├── Logs.tsx # 访问日志 │ │ │ ├── AclRules.tsx # 黑白名单 │ │ │ └── Settings.tsx # 系统设置 │ │ ├── components/ # 可复用组件 │ │ └── hooks/ # React hooks │ └── package.json │ ├── cmd/standalone/main.go # 独立 CLI 入口(无 GUI) ├── build/ │ ├── build.ps1 # 一键构建(go build + 安装包) │ ├── wails-build.ps1 # wails build 封装(自动清理 .syso 冲突) │ ├── version.txt # 版本号源 │ ├── installer.iss # Inno Setup 脚本 │ ├── installer.nsi # NSIS 脚本 │ ├── versioninfo.json # exe 版本信息(goversioninfo) │ ├── windows/ # Wails Windows 资源(icon.ico、manifest) │ ├── app.svg / app.ico # 应用图标 │ ├── generate-icon.ps1 # 图标转换脚本 │ └── license.txt # MIT 许可证 │ └── docs/design.md # 完整设计文档 ``` --- ## 开发指南 ### 克隆仓库 ```powershell git clone https://gitee.com/yuanlidi/myproxy.git cd myproxy ``` SSH 方式:`git clone git@gitee.com:yuanlidi/myproxy.git` ### 环境准备 ```powershell winget install GoLang.Go # Go 1.22+ winget install OpenJS.NodeJS # Node.js 18+ go install github.com/wailsapp/wails/v2/cmd/wails@latest ``` 首次克隆后安装前端依赖: ```powershell cd frontend npm install cd .. ``` ### 启动带界面的桌面应用 | 方式 | 命令 | 场景 | |------|------|------| | 运行 exe | `.\myproxy.exe` | 日常使用 | | 开发热重载 | `wails dev` | 前后端联调 | | 生产构建 | `.\build\build.ps1 -Installer None` | 发布前编译 | #### 方式一:直接运行 exe ```powershell # 推荐用构建脚本(含 production 标签、无控制台、嵌入图标) .\build\build.ps1 -SkipFrontend -Installer None .\myproxy.exe ``` > 必须使用 `-tags production` 编译,否则 Wails 运行时会报错。`build.ps1` 和 `wails-build.ps1` 已自动处理。 #### 方式二:Wails 开发模式 ```powershell wails dev ``` 修改前端即时热更新,修改 Go 代码自动重编译。 #### 方式三:手动分离启动(排查问题) ```powershell # 终端 1 cd frontend && npm install && npm run dev # 终端 2 cd .. $env:FRONTEND_DEVSERVER_URL = "http://127.0.0.1:5173" wails dev # 或先 wails build 后用 .\build\bin\myproxy.exe ``` ### 纯命令行代理(无 GUI) ```powershell go run .\cmd\standalone\ # 输出: SOCKS5 proxy listening on 192.168.x.x:7890 ``` 不依赖 Wails / WebView2,适合无界面场景。 ### 手动编译(参考) ```powershell # 前端 cd frontend && npm run build && cd .. # 绑定生成 wails generate module # 生产编译(与 build.ps1 等效) $v = (Get-Content build\version.txt).Trim() go build -tags production -ldflags "-H=windowsgui -s -w -X main.version=$v" -o myproxy.exe . ``` ### 系统托盘说明 - **左键**托盘图标:显示/恢复主窗口 - **右键**托盘图标:弹出菜单(显示主窗口 / 退出) - 设置中可开关「最小化到托盘」;关闭窗口(X)也会隐藏到托盘(代理继续运行) - 彻底退出:托盘菜单 → 退出 ### 代码结构约定 - `internal/proxy/` — SOCKS5 协议实现,不依赖 UI 框架 - `internal/tracker/` — 连接追踪、流量统计、日志记录 - `internal/acl/` — 规则匹配引擎 - `internal/setting/` — JSON 配置读写 - `frontend/` — React SPA,通过 Vite 构建,产出入 `frontend/dist/` --- ## 许可证 MIT License — 详见 [LICENSE](LICENSE)(安装包内使用 [build/license.txt](build/license.txt))