创建一个 go socks5 客户端

Creating a go socks5 client

所以我正在查看 net/proxy 文档,但根本没有关于如何使用其任何方法的示例。我正在研究使用 socks5。这是函数的样子:

func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error)

现在一切都说得通了,除了我对 forward 感到困惑,它是一个类型 Dialer 和函数本身 returns 一个 Dialer。其他一切都是有道理的 network, add, auth 只是向前让我失望了。我将如何设置我的客户端以使用 socks5 拨号器?

所以我能够找到我的问题的答案,任何对如何在 go 中设置 socks5 客户端感兴趣的人都是:

dialSocksProxy, err := proxy.SOCKS5("tcp", "proxy_ip", nil, proxy.Direct)
if err != nil {
    fmt.Println("Error connecting to proxy:", err)
}
tr := &http.Transport{Dial: dialSocksProxy.Dial}

// Create client
myClient := &http.Client{
    Transport: tr,
}

最新版本的 Go 还通过 HTTP_PROXY 环境变量支持 SOCKS5 代理。您可以照常编写 http.Client 代码,然后只需在运行时设置环境变量,例如:

HTTP_PROXY="socks5://127.0.0.1:1080/" ./myGoHttpClient

如果你需要带auth的socks5客户端代理,你可以使用这样的东西:

auth := proxy.Auth{
    User:     "YOUR_PROXY_LOGIN",
    Password: "YOUR_PROXY_PASSWORD",
}

dialer, err := proxy.SOCKS5("tcp", "PROXY_IP", &auth, proxy.Direct)
if err != nil {
    fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
}

tr := &http.Transport{Dial: dialer.Dial}
myClient := &http.Client{
    Transport: tr,
}