diff --git a/v2/pkg/protocols/headless/engine/http_client.go b/v2/pkg/protocols/headless/engine/http_client.go index 89e7eafa4..ea32aa5e3 100644 --- a/v2/pkg/protocols/headless/engine/http_client.go +++ b/v2/pkg/protocols/headless/engine/http_client.go @@ -3,18 +3,16 @@ package engine import ( "context" "crypto/tls" - "fmt" "net" "net/http" "net/http/cookiejar" "net/url" "time" - "github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils" - "golang.org/x/net/proxy" "github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/protocolstate" + "github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils" "github.com/projectdiscovery/nuclei/v2/pkg/types" ) @@ -53,14 +51,15 @@ func newHttpClient(options *types.Options) (*http.Client, error) { transport.Proxy = http.ProxyURL(proxyURL) } } else if types.ProxySocksURL != "" { - var proxyAuth *proxy.Auth socksURL, proxyErr := url.Parse(types.ProxySocksURL) - if proxyErr == nil { - proxyAuth = &proxy.Auth{} - proxyAuth.User = socksURL.User.Username() - proxyAuth.Password, _ = socksURL.User.Password() + if proxyErr != nil { + return nil, err } - dialer, proxyErr := proxy.SOCKS5("tcp", fmt.Sprintf("%s:%s", socksURL.Hostname(), socksURL.Port()), proxyAuth, proxy.Direct) + dialer, err := proxy.FromURL(socksURL, proxy.Direct) + if err != nil { + return nil, err + } + dc := dialer.(interface { DialContext(ctx context.Context, network, addr string) (net.Conn, error) }) diff --git a/v2/pkg/protocols/http/httpclientpool/clientpool.go b/v2/pkg/protocols/http/httpclientpool/clientpool.go index ff53d54a4..393f70c06 100644 --- a/v2/pkg/protocols/http/httpclientpool/clientpool.go +++ b/v2/pkg/protocols/http/httpclientpool/clientpool.go @@ -3,7 +3,6 @@ package httpclientpool import ( "context" "crypto/tls" - "fmt" "net" "net/http" "net/http/cookiejar" @@ -13,14 +12,13 @@ import ( "sync" "time" - "github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils" - "github.com/pkg/errors" "golang.org/x/net/proxy" "golang.org/x/net/publicsuffix" "github.com/projectdiscovery/fastdialer/fastdialer" "github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/protocolstate" + "github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils" "github.com/projectdiscovery/nuclei/v2/pkg/types" "github.com/projectdiscovery/rawhttp" "github.com/projectdiscovery/retryablehttp-go" @@ -210,14 +208,15 @@ func wrappedGet(options *types.Options, configuration *Configuration) (*retryabl transport.Proxy = http.ProxyURL(proxyURL) } } else if types.ProxySocksURL != "" { - var proxyAuth *proxy.Auth socksURL, proxyErr := url.Parse(types.ProxySocksURL) - if proxyErr == nil { - proxyAuth = &proxy.Auth{} - proxyAuth.User = socksURL.User.Username() - proxyAuth.Password, _ = socksURL.User.Password() + if proxyErr != nil { + return nil, proxyErr } - dialer, proxyErr := proxy.SOCKS5("tcp", fmt.Sprintf("%s:%s", socksURL.Hostname(), socksURL.Port()), proxyAuth, proxy.Direct) + dialer, err := proxy.FromURL(socksURL, proxy.Direct) + if err != nil { + return nil, err + } + dc := dialer.(interface { DialContext(ctx context.Context, network, addr string) (net.Conn, error) })