From a20ebd71201e539d110390bb8f692600048792bc Mon Sep 17 00:00:00 2001 From: Heiko Reese Date: Sat, 6 Mar 2021 11:55:16 +0100 Subject: [PATCH] Added support for SOCKS5 authentication (fixes #333) --- src/comm/comm.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/comm/comm.go b/src/comm/comm.go index d1b77db6..daf0b1ee 100644 --- a/src/comm/comm.go +++ b/src/comm/comm.go @@ -6,6 +6,8 @@ import ( "fmt" "io" "net" + "net/url" + "strings" "time" "github.com/schollz/croc/v8/src/utils" @@ -31,7 +33,16 @@ func NewConnection(address string, timelimit ...time.Duration) (c *Comm, err err var connection net.Conn if Socks5Proxy != "" && !utils.IsLocalIP(address) { var dialer proxy.Dialer - dialer, err = proxy.SOCKS5("tcp", Socks5Proxy, nil, proxy.Direct) + // prepend schema if no schema is given + if !strings.Contains(Socks5Proxy, `://`) { + Socks5Proxy = `socks5://` + Socks5Proxy + } + socks5ProxyURL, urlParseError := url.Parse(Socks5Proxy) + if urlParseError != nil { + err = fmt.Errorf("Unable to parse socks proxy url: %s", urlParseError) + return + } + dialer, err = proxy.FromURL(socks5ProxyURL, proxy.Direct) if err != nil { err = fmt.Errorf("proxy failed: %w", err) return