perf: 优化Proxy.go的代码,添加注释,规范输出

This commit is contained in:
ZacharyZcR 2024-12-18 22:20:45 +08:00
parent ec346409f7
commit 9433741471

View File

@ -2,6 +2,7 @@ package Common
import ( import (
"errors" "errors"
"fmt"
"golang.org/x/net/proxy" "golang.org/x/net/proxy"
"net" "net"
"net/url" "net/url"
@ -9,57 +10,69 @@ import (
"time" "time"
) )
// WrapperTcpWithTimeout 创建一个带超时的TCP连接
func WrapperTcpWithTimeout(network, address string, timeout time.Duration) (net.Conn, error) { func WrapperTcpWithTimeout(network, address string, timeout time.Duration) (net.Conn, error) {
d := &net.Dialer{Timeout: timeout} d := &net.Dialer{Timeout: timeout}
return WrapperTCP(network, address, d) return WrapperTCP(network, address, d)
} }
// WrapperTCP 根据配置创建TCP连接
func WrapperTCP(network, address string, forward *net.Dialer) (net.Conn, error) { func WrapperTCP(network, address string, forward *net.Dialer) (net.Conn, error) {
//get conn // 直连模式
var conn net.Conn
if Socks5Proxy == "" { if Socks5Proxy == "" {
var err error conn, err := forward.Dial(network, address)
conn, err = forward.Dial(network, address)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("建立TCP连接失败: %v", err)
}
} else {
dailer, err := Socks5Dailer(forward)
if err != nil {
return nil, err
}
conn, err = dailer.Dial(network, address)
if err != nil {
return nil, err
} }
return conn, nil
} }
return conn, nil
// Socks5代理模式
dialer, err := Socks5Dialer(forward)
if err != nil {
return nil, fmt.Errorf("创建Socks5代理失败: %v", err)
}
conn, err := dialer.Dial(network, address)
if err != nil {
return nil, fmt.Errorf("通过Socks5建立连接失败: %v", err)
}
return conn, nil
} }
func Socks5Dailer(forward *net.Dialer) (proxy.Dialer, error) { // Socks5Dialer 创建Socks5代理拨号器
func Socks5Dialer(forward *net.Dialer) (proxy.Dialer, error) {
// 解析代理URL
u, err := url.Parse(Socks5Proxy) u, err := url.Parse(Socks5Proxy)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("解析Socks5代理地址失败: %v", err)
} }
// 验证代理类型
if strings.ToLower(u.Scheme) != "socks5" { if strings.ToLower(u.Scheme) != "socks5" {
return nil, errors.New("Only support socks5") return nil, errors.New("仅支持socks5代理")
} }
address := u.Host address := u.Host
var auth proxy.Auth var dialer proxy.Dialer
var dailer proxy.Dialer
// 根据认证信息创建代理
if u.User.String() != "" { if u.User.String() != "" {
auth = proxy.Auth{} // 使用用户名密码认证
auth.User = u.User.Username() auth := proxy.Auth{
password, _ := u.User.Password() User: u.User.Username(),
auth.Password = password }
dailer, err = proxy.SOCKS5("tcp", address, &auth, forward) auth.Password, _ = u.User.Password()
dialer, err = proxy.SOCKS5("tcp", address, &auth, forward)
} else { } else {
dailer, err = proxy.SOCKS5("tcp", address, nil, forward) // 无认证模式
dialer, err = proxy.SOCKS5("tcp", address, nil, forward)
} }
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("创建Socks5代理失败: %v", err)
} }
return dailer, nil
return dialer, nil
} }