# proxy-program **Repository Path**: dorne/proxy-program ## Basic Information - **Project Name**: proxy-program - **Description**: 代理透传cli工具 - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-31 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # proxy-program 将任意可执行文件"透传"到另一个位置。安装后,目标 exe 与源程序完全等价——所有命令行参数、stdin/stdout/stderr 及退出码均原样转发,且**只生成单个 exe 文件**,无任何旁路文件。 --- ## 快速上手 ```bash # 1. 生成代理 exe proxy-program --source "D:\server\nginx\nginx.exe" --target "C:\Users\Dorne\.local\bin\nginx.exe" # 2. 直接使用,参数透传 C:\Users\Dorne\.local\bin\nginx.exe -c nginx.conf -p D:\server\nginx ``` --- ## CLI 参数 | 参数 | 说明 | |------|------| | `--source <路径>` | 要被代理的源文件,支持 `.exe` / `.bat` / `.cmd` / `.ps1`(绝对或相对路径均可) | | `--target <路径>` | 代理 exe 的生成位置(目录不存在时自动创建) | | `-V`, `--version` | 显示版本号,例:`proxy-program 0.1.0` | | `-h`, `--help` | 显示帮助信息及示例 | | `--show-proxy-info` | (代理 exe 专用)打印代理自身路径及源程序路径后退出 | --- ## 使用说明 ### 安装代理 ```bash proxy-program --source <源程序路径> --target <目标路径> ``` ``` Created successfully !!! Proxy Created: C:\Users\Dorne\.local\bin\nginx.exe Source Binary: D:\server\nginx\nginx.exe ``` - 源路径自动解析为绝对路径后嵌入目标 exe。 - 目标目录不存在时自动创建。 ### 使用代理 安装完成后,直接调用目标 exe,参数原封不动传递给源程序: ```bash C:\Users\Dorne\.local\bin\nginx.exe -c nginx.conf -p D:\server\nginx # 等价于:D:\server\nginx\nginx.exe -c nginx.conf -p D:\server\nginx ``` ### 查看代理信息 对已安装的代理 exe 传入 `--show-proxy-info`,打印代理自身路径及源程序路径后退出: ```bash C:\Users\Dorne\.local\bin\nginx.exe --show-proxy-info ``` ``` Proxy Path: C:\Users\Dorne\.local\bin\nginx.exe Source Path: D:\server\nginx\nginx.exe ``` ### 重新安装 / 更换源 对同一 `--target` 重新执行安装命令即可,旧的嵌入数据会自动清除: ```bash proxy-program --source "D:\server\nginx-new\nginx.exe" --target "C:\Users\Dorne\.local\bin\nginx.exe" ``` --- ## 打包构建 **环境要求:** [Rust](https://rustup.rs/) stable 工具链 ```bash # 编译 release 版本 cargo build --release # 产物:target/release/proxy-program.exe ``` **跨平台编译示例(Windows → Linux):** ```bash rustup target add x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu ``` --- ## 实现原理 程序根据参数自动进入两种模式: ### 安装模式(传入 `--source` + `--target`) 1. 将 `--source` 解析为绝对路径。 2. 读取自身 exe 字节,自动剥离已有 overlay(支持幂等重装)。 3. 将纯净的 exe 字节写入 `--target`。 4. 在文件末尾追加 **overlay footer**,将源路径内嵌其中: ``` ┌──────────────────────────────┐ │ source_path(UTF-8 字节) │ ← 长度可变 ├──────────────────────────────┤ │ path_len(u64 小端序,8 B) │ ├──────────────────────────────┤ │ MAGIC "PRXYMGC1"(8 B) │ └──────────────────────────────┘ ``` > Windows PE 加载器只解析文件头,忽略末尾附加数据,不影响 exe 正常运行。 ### 代理模式(自身 exe 含 overlay) 程序启动时**优先检测 overlay**,若存在则进入代理模式: 1. 从 exe 末尾读取魔数、路径长度及源路径。 2. 若参数为 `--show-proxy-info`:打印代理路径和源路径后退出。 3. 其余所有参数(包括 `--version`、`--help` 等)全部原样转发给源程序。 4. 根据源文件扩展名选择启动方式: - `.bat` / `.cmd` → `cmd.exe /c "source" ` - `.ps1` → `powershell.exe -NoProfile -ExecutionPolicy Bypass -File "source" ` - 其他(`.exe` 等) → 直接启动 5. 等待子进程退出,以相同退出码退出。 --- ## License Copyright 2026 Dorne Licensed under the [Apache License, Version 2.0](LICENSE).