From 0f658c5a53093526791fc8d967cb0764d9b5e489 Mon Sep 17 00:00:00 2001 From: ZeroDeng Date: Sun, 26 May 2024 23:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20Fixed=20SOCKS5=20Proxy=20?= =?UTF-8?q?Authentication=20Issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(telegram代理): 修复telegram设置socks5加用户名密码无法代理的问题 修复socks5使用代理用户名密码的时候无法连接认证的问题。 --- common/requester/http_client.go | 11 +++++++++-- common/requester/ws_client.go | 10 +++++++++- common/telegram/common.go | 11 +++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/common/requester/http_client.go b/common/requester/http_client.go index c74909c4..17f76ce0 100644 --- a/common/requester/http_client.go +++ b/common/requester/http_client.go @@ -53,8 +53,15 @@ func socks5ProxyFunc(ctx context.Context, network, addr string) (net.Conn, error if err != nil { return nil, fmt.Errorf("error parsing proxy address: %w", err) } - - proxyDialer, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct) + var auth *proxy.Auth = nil + password, isSetPassword := proxyURL.User.Password() + if isSetPassword { + auth = &proxy.Auth{ + User: proxyURL.User.Username(), + Password: password, + } + } + proxyDialer, err := proxy.SOCKS5("tcp", proxyURL.Host, auth, proxy.Direct) if err != nil { return nil, fmt.Errorf("error creating socks5 dialer: %w", err) } diff --git a/common/requester/ws_client.go b/common/requester/ws_client.go index 2ea865d7..30000072 100644 --- a/common/requester/ws_client.go +++ b/common/requester/ws_client.go @@ -38,7 +38,15 @@ func setWSProxy(dialer *websocket.Dialer, proxyAddr string) error { case "http", "https": dialer.Proxy = http.ProxyURL(proxyURL) case "socks5": - socks5Proxy, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct) + var auth *proxy.Auth = nil + password, isSetPassword := proxyURL.User.Password() + if isSetPassword { + auth = &proxy.Auth{ + User: proxyURL.User.Username(), + Password: password, + } + } + socks5Proxy, err := proxy.SOCKS5("tcp", proxyURL.Host, auth, proxy.Direct) if err != nil { return fmt.Errorf("error creating socks5 dialer: %w", err) } diff --git a/common/telegram/common.go b/common/telegram/common.go index 6e22c687..bb3284d1 100644 --- a/common/telegram/common.go +++ b/common/telegram/common.go @@ -235,7 +235,6 @@ func getHttpClient() (httpClient *http.Client) { common.SysLog("failed to parse TG proxy URL: " + err.Error()) return } - switch proxyURL.Scheme { case "http", "https": httpClient = &http.Client{ @@ -244,7 +243,15 @@ func getHttpClient() (httpClient *http.Client) { }, } case "socks5": - dialer, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct) + var auth *proxy.Auth = nil + password, isSetPassword := proxyURL.User.Password() + if isSetPassword { + auth = &proxy.Auth{ + User: proxyURL.User.Username(), + Password: password, + } + } + dialer, err := proxy.SOCKS5("tcp", proxyURL.Host, auth, proxy.Direct) if err != nil { common.SysLog("failed to create TG SOCKS5 dialer: " + err.Error()) return