HTTP 代理与 SOCKS5 代理互转命令行工具,使用 Go 编写,同时支持 Linux 与 Windows。
本地开启一个 HTTP 或 SOCKS5 代理服务端(前端),将流量转发到另一个 HTTP/SOCKS5 代理(后端);不指定后端时则为普通直连代理。
- 代理互转:支持 HTTP↔SOCKS5 全部四种组合(HTTP→SOCKS5、SOCKS5→HTTP、HTTP→HTTP、SOCKS5→SOCKS5)
- 直连代理:仅指定前端时,自动开启普通 HTTP / SOCKS5 代理,直接转发流量到目标
- 前后端认证:前端与后端均可单独配置用户名密码认证,默认匿名
- 多服务并行:通过 yaml 配置文件可同时开启多个监听端口,运行不同转发规则
- CLI 优先:命令行参数优先级高于配置文件中的同名参数
- 来源 IP 访问控制(ACL):支持白名单/黑名单,规则支持单一 IP、IP 范围(
192.168.1.100-192.168.1.150)、CIDR(10.0.0.0/8),亦支持 IPv6 - 分级日志:
debug/info/warn/error/none,可输出到终端或指定文件 - 跨平台:纯标准库实现(仅依赖
gopkg.in/yaml.v3),支持交叉编译 Linux / Windows
go-proxy-forward-tool/
├── main.go # 程序入口:命令行解析、参数优先级合并、信号处理
├── config.go # yaml 配置加载、校验与编译
├── config.example.yaml# 配置文件示例(含注释)
├── logger.go # 分级日志器
├── acl.go # 来源 IP 访问控制(单IP/范围/CIDR、黑白名单)
├── backend.go # 后端连接:HTTP 隧道 / SOCKS5 / 直连,及双向隧道拷贝
├── httpproxy.go # HTTP 前端代理(CONNECT 隧道 + 普通请求转发)
├── socksproxy.go # SOCKS5 前端代理(RFC1928/1929 握手与认证)
├── server.go # 服务框架:多服务并行、优雅停止
├── *_test.go # 单元测试与集成测试
├── go.mod / go.sum
└── .gitignore
# 本地平台
go build -o proxy-forward .
# Linux (amd64)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o proxy-forward .
# Windows (amd64)
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o proxy-forward.exe .proxy-forward [选项]
-config <file> yaml 配置文件路径(支持多服务)
-listen <addr> 前端监听地址,如 http://0.0.0.0:8080 或 socks5://127.0.0.1:1080
可在地址中嵌入认证: http://user:pass@0.0.0.0:8080
-backend <addr> 后端代理地址,如 socks5://user:pass@127.0.0.1:1083 或 http://127.0.0.1:7071
省略或指定 direct 则为直连代理
-acl <rules> 来源IP访问控制: whitelist:192.168.1.100,10.0.0.0/8,1.2.3.4-1.2.3.9
或 blacklist:192.168.1.100,10.0.0.0/8
-log-level <level> 日志级别: debug|info|warn|error|none(默认 info)
-log-file <file> 日志输出文件路径,默认输出到终端
-version 显示版本号
# HTTP 前端 -> SOCKS5 后端
./proxy-forward -listen http://0.0.0.0:8080 -backend socks5://127.0.0.1:1083
# SOCKS5 前端 -> HTTP 后端
./proxy-forward -listen socks5://0.0.0.0:1080 -backend http://127.0.0.1:7071
# 直连 SOCKS5 代理(无后端)
./proxy-forward -listen socks5://0.0.0.0:1080
# 直连 HTTP 代理
./proxy-forward -listen http://0.0.0.0:8080
# 带认证与 ACL
./proxy-forward -listen http://user:pass@0.0.0.0:8080 -acl whitelist:192.168.1.0/24,127.0.0.1
# 配置文件方式
./proxy-forward -config config.yaml命令行参数与配置文件重复时,命令行优先。若配置文件含多个服务而命令行指定了 -listen/-backend/-acl,则覆盖配置文件中的第一个服务。
log:
level: info # debug | info | warn | error | none
file: "" # 日志输出文件路径,留空则输出到终端
servers: # 可配置多个服务,同时监听运行
- name: rule1 # 规则名称(仅用于日志标识,可选)
frontend: # 前端(必填)
protocol: http # http | socks5
listen: "0.0.0.0:8080"
username: "" # 前端认证(可选),留空为匿名
password: ""
acl: # 来源 IP 访问控制(可选)
mode: whitelist # whitelist | blacklist
rules:
- "192.168.1.100"
- "192.168.1.100-192.168.1.150" # IP 范围(含边界)
- "10.0.0.0/8" # CIDR
backend: # 后端(可选),不配置则为直连
protocol: socks5 # http | socks5 | direct
host: "127.0.0.1"
port: 1083
username: "" # 后端认证(可选)
password: ""log:
level: info
file: "./proxy.log"
servers:
- name: rule1 # HTTP: 0.0.0.0:8080 -> SOCKS5 127.0.0.1:1083
frontend: { protocol: http, listen: "0.0.0.0:8080" }
backend: { protocol: socks5, host: "127.0.0.1", port: 1083 }
- name: rule2 # SOCKS5: 0.0.0.0:4430 -> HTTP 127.0.0.1:7071
frontend: { protocol: socks5, listen: "0.0.0.0:4430" }
backend: { protocol: http, host: "127.0.0.1", port: 7071 }
- name: rule3 # SOCKS5: 0.0.0.0:4451 -> SOCKS5 127.0.0.1:6780
frontend: { protocol: socks5, listen: "0.0.0.0:4451" }
backend: { protocol: socks5, host: "127.0.0.1", port: 6780 }whitelist:仅放行命中规则的来源 IP,未命中一律拒绝blacklist:拒绝命中规则的来源 IP,未命中一律放行- 规则支持三种形式,可混合使用:
- 单一 IP:
192.168.1.100 - IP 范围:
192.168.1.100-192.168.1.150(包含边界) - CIDR:
10.0.0.0/8、2001:db8::/32
- 单一 IP:
- 仅验证来源 IP;客户端与前端之间未接入其他中间代理时,即为连接方的 IP
| 级别 | 说明 |
|---|---|
| debug | 最详细,含每连接转发细节 |
| info | 常规信息(默认) |
| warn | 警告(认证失败、ACL 拒绝等) |
| error | 错误 |
| none | 完全静默 |
- 不指定
-log-file/log.file时,日志输出到终端 - 指定文件路径后日志追加写入该文件(自动创建)
- HTTP 前端:解析请求,
CONNECT方法建立隧道;普通请求改写为 origin-form 后经隧道转发 - SOCKS5 前端:完整实现 RFC1928 握手与 RFC1929 用户名密码认证,支持 CONNECT 命令
- 后端连接:
- HTTP 后端:发送
CONNECT target建立隧道(带Proxy-Authorization支持) - SOCKS5 后端:客户端握手 + CONNECT(带用户名密码认证支持)
- 直连:直接 TCP 连接目标
- HTTP 后端:发送
- 隧道采用双向拷贝 + 半关闭传播,保证 EOF 沿多级链路正确传递
go vet ./...
go test -race ./...测试覆盖:ACL 解析与匹配、配置解析、CLI 参数覆盖、HTTP/SOCKS5 前后端四种链路、前后端认证、ACL 白名单/黑名单、CONNECT 隧道、多服务并行运行等。