logo
0
0
WeChat Login
xiong2<xiong2@htsystem.com>
fix: 修正 go.mod 模块路径为在线可引用路径 cnb.cool/accbot/panshi/muxProxy

muxProxy

高性能多协议代理服务,基于 WebSocket + Smux 多路复用实现网络流量转发。

功能特点

  • 多协议支持:WebSocket (ws/wss)、多路复用 WebSocket (mws/mwss)、SOCKS5
  • Smux 多路复用:多个连接共享底层通道,减少连接数,提升高并发性能
  • 链式代理:通过 -F 参数串联多个代理节点,构建多跳转发链路
  • SOCKS5 代理:支持无认证和用户名密码认证
  • 轻量级:单二进制文件,开箱即用
  • 可集成:实例化 API 设计,支持作为 Go 库嵌入第三方项目

快速开始

编译

go build -o muxProxy main.go

命令行用法

muxProxy -L {监听地址} [-F {代理链节点}]...

参数说明:

参数说明示例
-L本地监听地址(必填)s5://0.0.0.0:1081
-F代理链上游节点,可多次指定mws://proxy1:1081/ws

运行示例

# SOCKS5 代理(无认证) ./muxProxy -L "s5://0.0.0.0:1081" # SOCKS5 代理(用户名密码认证) ./muxProxy -L "s5://user:pass@0.0.0.0:1081" # SOCKS5 + 代理链转发 ./muxProxy -L "s5://0.0.0.0:1081" -F "mws://proxy1:1081/ws" # SOCKS5 + 多跳代理链 ./muxProxy -L "s5://0.0.0.0:1081" -F "mws://hop1:1081/ws" -F "mws://hop2:1082/ws" # 多路复用 WebSocket 服务端 ./muxProxy -L "mws://0.0.0.0:1081/ws" # 安全 WebSocket 服务端 ./muxProxy -L "wss://0.0.0.0:1082/secure"

支持协议

协议说明可用于 -L可用于 -F
s5SOCKS5 代理
wsWebSocket
wss安全 WebSocket (TLS)
mws多路复用 WebSocket (Smux)
mwss安全多路复用 WebSocket (Smux + TLS)

作为 Go 库使用

muxProxy 提供实例化 API,可嵌入到第三方 Go 项目中:

import "muxProxy/proxyPkg" // 创建实例 p := proxyPkg.NewProxy() // 设置代理链(可选,运行时可动态修改) p.SetChain([]string{"mws://proxy1:1081/ws"}) // 启动监听 go p.Listen("s5://0.0.0.0:1081") // 运行时切换代理链 p.SetChain([]string{"mws://proxy2:1082/ws"}) // 获取当前代理链 chain := p.GetChain() // 优雅关闭 p.Close()

主要 API:

方法说明
NewProxy()创建代理实例
SetChain([]string)设置代理链(仅允许 ws/wss/mws/mwss)
GetChain()获取当前代理链副本
Listen(url)解析 URL 并启动服务
Close()优雅关闭所有服务和连接池
BuildChainHeader(...)构造链式二进制协议头(导出纯函数)

项目结构

muxProxy/ ├── main.go # 程序入口,CLI 参数解析(-L/-F) ├── configPkg/ # 配置结构定义 ├── copyPkg/ # 双向数据转发(32KB 内存池) ├── proxyPkg/ # 代理核心 │ ├── proxy.go # Proxy 结构体 + 公共 API │ ├── HandleConnectionProxy.go # 协议头解析 + 链式构造 + 连接管理 │ ├── socks5.go # SOCKS5 服务端 │ ├── cert.pem / key.pem # TLS 证书(嵌入编译) │ └── *_test.go # 自动化测试 ├── logconfig1.yaml # 日志配置 └── docs/ # 项目知识库

工作原理

  1. 通过 -L 启动指定协议的服务(SOCKS5 / WebSocket / 多路复用 WebSocket)
  2. 接收客户端连接,解析自定义二进制协议头获取目标地址
  3. 如果配置了代理链(-F),将目标信息封装为嵌套协议头,逐跳转发
  4. 在客户端和目标之间建立双向转发通道
  5. 多路复用协议(mws/mwss)通过 Smux 在单个 WebSocket 上复用多条流

依赖

用途
gorilla/websocketWebSocket 协议
xtaci/smux连接多路复用
txthinking/socks5SOCKS5 协议
cnb.cool/accbot/goTool日志 / 同步原语 / WS 封装
rs/zerolog结构化日志
natefinch/lumberjack日志轮转(10MB / 30天)

注意事项

  • 防火墙需开放对应监听端口
  • 日志输出到 ./tem/logs/,目录需可写权限
  • wss/mwss 的 TLS 证书已内嵌编译,无需额外配置
  • 代理链(-F)仅支持 ws/wss/mws/mwss 协议
  • 高并发场景推荐使用 mws/mwss 以利用多路复用特性

About

自定义传输协议,配合miho

Language
Go94.4%
Others5.6%