Skip to content

webee/dynamic-proxy-chain

Repository files navigation

动态代理链

一个支持动态代理链的HTTP/SOCKS5代理服务器。

特点

  • 同时支持HTTP和SOCKS5代理协议,共用同一个端口
  • 支持用户名、密码认证(可选)
  • 支持HTTP CONNECT命令
  • 支持多级代理链
  • 支持在用户名中编码动态代理链
  • 支持配置默认代理链
  • 支持.env文件配置

安装

go install github.com/webee/dynamic-proxy-chain/cmd/dynamic-proxy-chain@latest

或者从源码编译:

git clone https://github.com/webee/dynamic-proxy-chain.git
cd dynamic-proxy-chain
go build ./cmd/dynamic-proxy-chain

项目结构

dynamic-proxy-chain/
├── cmd/
│   └── dynamic-proxy-chain/  // 命令行入口程序
│       └── main.go
├── config.go                 // 配置处理模块
├── chain.go                  // 代理链管理
├── server.go                 // 代理服务器实现
├── .env.example              // 环境变量示例
├── go.mod                    // Go模块文件
└── README.md                 // 项目文档

使用方法

命令行参数

dynamic-proxy-chain [选项]

选项:
  -host string
        监听主机 (默认 "0.0.0.0")
  -port int
        监听端口 (默认 8080)
  -user string
        认证用户名
  -pass string
        认证密码
  -proxy string
        默认代理链,格式:scheme://[username:password@]host:port[,scheme://[username:password@]host:port]...

环境变量

也可以通过环境变量或.env文件配置:

  • HOST: 监听主机
  • PORT: 监听端口
  • USER: 认证用户名
  • PASS: 认证密码
  • PROXY: 默认代理链

动态代理链格式

在用户名中编码动态代理链的格式为:

username+<p1 scheme>;<p1 username>;<p1 password>;<p1 host>;<p1 port>+<p2 scheme>;<p2 username>;<p2 password>;<p2 host>;<p2 port>+...

其中:

  • username: 原始用户名
  • +: 代理分隔符
  • ;: 代理内部参数分隔符
  • 每个代理参数包括:scheme, username, password, host, port

在使用socks5代理请求时,要使动态代理链生效,则服务器必须配置用户名, 因为动态代理链是编码在用户名中的,如果服务器不需要认证,则无法解析到指定的动态代理链信息。

示例

启动代理服务器

# 启动一个简单的代理服务器
dynamic-proxy-chain

# 指定端口和认证信息
dynamic-proxy-chain -port 1080 -user user -pass pass

# 配置默认代理链
dynamic-proxy-chain -proxy "http://proxy1.example.com:8080,socks5://user:pass@proxy2.example.com:1080"

使用动态代理链

例如,如果代理服务器配置了用户名user和密码pass,那么使用动态代理链的方式为:

用户名: user+http;;proxy1.example.com;8080+socks5;user2;pass2;proxy2.example.com;1080
密码: pass

这将创建一个代理链:客户端 -> 动态代理链服务器 -> http://proxy1.example.com:8080 -> socks5://user2:pass2@proxy2.example.com:1080 -> 目标服务器

作为库使用

package main

import (
	"log"

	dpc "github.com/webee/dynamic_proxy_chain"
)

func main() {
	// 创建配置
	cfg := &dpc.Config{
		Host:     "0.0.0.0",
		Port:     8080,
		Username: "user",
		Password: "pass",
	}

	// 创建代理服务器
	server := dpc.NewServer(cfg)

	// 启动服务器
	if err := server.Start(); err != nil {
		log.Fatalf("启动服务器失败: %v", err)
	}
}

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages