Path: blob/main/mitm-socket/go/dialer_proxy_socks5.go
1029 views
package main12import (3"errors"4"fmt"5"net"6"net/url"7"strings"89"golang.org/x/net/proxy"10)1112func DialAddrViaSock5Proxy(dialer net.Dialer, addr string, proxyUrl *url.URL) (net.Conn, error) {13var socksAuth *proxy.Auth = nil1415proxyHost := proxyUrl.Host1617if strings.IndexRune(proxyHost, ':') == -1 {18proxyHost += ":1080"19}2021if proxyUrl.User != nil {22password, _ := proxyUrl.User.Password()23socksAuth = &proxy.Auth{24User: proxyUrl.User.Username(),25Password: password,26}27}2829fmt.Printf("Connecting via socks5 proxy %s to %s\n", proxyHost, addr)3031socksDialer, err := proxy.SOCKS5("tcp", proxyHost, socksAuth, proxy.Direct)32if err != nil {33responseMessage := fmt.Sprintf("SOCKS5_PROXY_ERR connection failed (%s)", err)34return nil, errors.New(responseMessage)35}36fmt.Printf("Got socks5 dialer %s to %s\n", proxyHost, addr)3738conn, err := socksDialer.Dial("tcp", addr)39if err != nil {40responseMessage := fmt.Sprintf("SOCKS5_PROXY_ERR dial failed (%s)", err)41return nil, errors.New(responseMessage)42}4344return conn, nil45}464748