创建一个 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,
}
所以我正在查看 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,
}