41 lines · 1.1 KB · Go
RawDownload
package proxy import (	"fmt"	"net"	"strings" 	"golang.org/x/net/proxy") // SOCKS5Dial dials a net.Conn using a SOCKS5 proxy server.// The socks5Proxy address can be in the form of [user:password@]host:port, [user@]host:port or just host:port if no auth is required.// It will optionally take a proxyDialer to dial the SOCKS5 proxy server. If nil is passed, it will use the default net.Dialer.func SOCKS5Dial(network, addr, socks5Proxy string, proxyDialer proxy.Dialer) (net.Conn, error) { 	if proxyDialer == nil {		proxyDialer = &net.Dialer{}	}	var (		proxyAddress string		proxyAuth    *proxy.Auth	)	if credsAndHost := strings.SplitN(socks5Proxy, "@", 2); len(credsAndHost) == 2 {		proxyCreds := strings.SplitN(credsAndHost[0], ":", 2)		proxyAuth = &proxy.Auth{			User: proxyCreds[0],		}		if len(proxyCreds) == 2 {			proxyAuth.Password = proxyCreds[1]		}		proxyAddress = credsAndHost[1]	} else {		proxyAddress = credsAndHost[0]	}	proxyDialer, err := proxy.SOCKS5("tcp", proxyAddress, proxyAuth, proxyDialer)	if err != nil {		return nil, fmt.Errorf("failed to create proxy dialer: %w", err)	}	return proxyDialer.Dial(network, addr) }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t