# web-transfer **Repository Path**: nachao/web-transfer ## Basic Information - **Project Name**: web-transfer - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-21 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web Transfer - 内网穿透工具 一个支持多客户端的内网穿透工具,允许通过公网服务器访问本地服务。 ## 目录结构 ``` web-transfer/ ├── server/ # 服务端 │ ├── main.go # 服务端主程序(支持 CORS) │ ├── go.mod # Go 模块定义 │ ├── build/ # 构建产物 │ └── scripts/ # 服务端部署脚本 │ ├── build.sh # 构建 │ ├── publish.sh # 部署到服务器 │ └── check-server.sh # 检查服务状态 │ ├── client-go/ # Go 客户端(适合生产部署) │ ├── main.go # 客户端主程序 │ ├── install.go # Windows 服务安装器 │ ├── uninstall.go # Windows 服务卸载器 │ ├── go.mod # Go 模块定义 │ ├── configs/ # 配置文件目录 │ └── scripts/ # 构建/部署脚本 │ ├── build.bat # 构建 Windows 版本 │ ├── publish.bat # 安装 Windows 服务 │ └── nssm.exe # NSSM 服务管理工具 │ ├── client-js/ # Node.js 客户端(支持 ES5/Node 6+) │ ├── src/ # 源代码 │ ├── bin/ # CLI 入口 │ ├── dist/ # Babel 编译产物(ES5) │ ├── babel.config.js # Babel 配置 │ └── package.json # npm 包配置 │ ├── client-sh/ # 一键安装脚本 │ ├── install.sh # 安装脚本(自动安装 Node.js + fnfrp) │ └── publish.sh # 发布脚本 │ ├── docs/ # 文档 │ ├── README.md # 详细说明文档 │ ├── DAEMON-README.md # JS 客户端后台运行说明 │ └── DAEMON-TECHNICAL.md # JS 客户端技术文档 │ └── config.conf # 默认配置示例 ``` ## 快速开始 ### 服务端部署 ```bash cd server ./scripts/build.sh # 构建 ./scripts/publish.sh # 部署到服务器(需配置 config.conf) ``` ### Go 客户端(Windows 服务) ```bash cd client-go scripts\build.bat # 构建 scripts\publish.bat # 安装为 Windows 服务(需管理员权限) ``` ### Go 客户端(一键安装) **Linux 服务器一键安装(无依赖,直接下载 Go 二进制)**: ```bash # 一键安装并启动 curl -fsSL http://frp.fangna.tech/sh/install.sh | bash -s -- myapp 8080 ``` 安装后使用: ```bash fnfrp -code myapp -target 8080 # 启动客户端(只有HTTP) fnfrp -code myapp -target 8080 -tcp # 同时穿透HTTP+SSH fnfrp -code myapp -target http://127.0.0.1:3000 # 指定完整地址 ``` 外网访问地址:`http://<服务代码>.frp.fangna.tech/` 管理命令: ```bash tail -f ~/.fnfrp/logs/fnfrp-myapp.log # 查看日志 kill $(cat ~/.fnfrp/pids/fnfrp-myapp.pid) # 停止服务 ``` **Windows 客户端一键安装**: 1. 下载 Windows 客户端: ``` http://frp.fangna.tech/sh/bin/windows/fnfrp-windows-amd64.exe ``` 2. 运行客户端: ```powershell .\fnfrp-windows-amd64.exe -code myapp -target 8080 .\fnfrp-windows-amd64.exe -code myapp -target 8080 -tcp # 同时穿透SSH ``` 3. 后台运行: ```powershell start /B fnfrp-windows-amd64.exe -code myapp -target 8080 ``` 4. 停止服务: ```powershell taskkill /F /IM fnfrp.exe ``` 外网访问地址:`http://<服务代码>.frp.fangna.tech/` 安装后使用: ```bash fnfrp -code myapp -target 8080 # 启动客户端(只有HTTP) fnfrp -code myapp -target 8080 -tcp # 同时穿透HTTP+SSH fnfrp -code myapp -target http://127.0.0.1:3000 # 指定完整地址 ``` 外网访问地址:`http://<服务代码>.frp.fangna.tech/` 管理命令: ```bash tail -f ~/.fnfrp/logs/fnfrp-myapp.log # 查看日志 kill $(cat ~/.fnfrp/pids/fnfrp-myapp.pid) # 停止服务 ``` ### Node.js 客户端(npm 安装) ```bash # 从 npm 安装(支持 Node 6+) npm install -g @fangna/frp --registry=http://npm.fangna.tech # 或本地开发 cd client-js npm install # 安装依赖 npm run build # Babel 编译 npm link # 全局安装 fnfrp 命令 fnfrp -c # 创建配置(交互式) fnfrp list # 查看所有配置 fnfrp start <服务代码> # 启动后台服务 fnfrp stop <服务代码> # 停止服务 fnfrp logs <服务代码> # 查看日志 fnfrp status <服务代码> # 查看状态 ``` ## 选择建议 | 场景 | 推荐客户端 | |------|-----------| | 开发调试、临时使用 | **Go 客户端**(一键安装) | | 生产环境、长期运行 | **Go 客户端** | | Windows 本地开发 | **Go 客户端**(Windows 版本) | | 无 Node.js 环境 | **Go 客户端** | | 老旧系统(Node 6+) | **Node.js 客户端**(已支持 ES5) | ## 特性 - **多客户端支持**:Go 客户端(生产级)、Node.js 客户端(开发级) - **HTTP + TCP 穿透**:不仅支持 Web 服务,还支持 SSH、MySQL、Redis 等任意 TCP 协议 - **ES5 兼容**:Node.js 客户端经 Babel 编译,支持 Node 6+ - **CORS 支持**:服务端内置 CORS 中间件,支持跨域请求 - **后台运行**:支持守护进程模式,关闭终端后服务继续运行 - **多配置管理**:支持多个穿透配置,每个配置独立管理 ## TCP 穿透 除了 HTTP 穿透,还支持任意 TCP 协议的穿透(SSH、MySQL、Redis 等)。 服务端使用**固定端口 6112**,先到先得。如果端口已被其他客户端占用,新的 TCP 穿透将无法注册。TCP 连接空闲 5 分钟后会自动断开释放端口。 ```bash # 同时穿透 HTTP + SSH(-tcp 默认22) fnfrp -code myapp -target 8080 -tcp # 同时穿透 HTTP + 其他TCP端口 fnfrp -code myapp -target 8080 -tcp 3306 # 只穿透 SSH(不指定 -target 则 HTTP 不转发) fnfrp -code myssh -tcp ``` 外部通过 `ssh -p 6112 user@服务器IP` 即可连接到本地 SSH。 **构建时注入(最简命令行):** 在 `config.conf` 中配置后构建,运行时无需额外参数: ```conf TCP_TARGET=127.0.0.1:22 ``` 更多用法见 [AGENTS.md](AGENTS.md)。 ## 详细文档 请查看 [docs/README.md](docs/README.md) 获取完整说明。