【问题标题】:Creating a go socks5 client创建一个 go socks5 客户端
【发布时间】:2015-11-07 17:24:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: go socks


    【解决方案1】:

    所以我能够找到我的问题的答案,任何对如何设置 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,
    }
    

    【讨论】:

    • 拨号在 1.10 中已弃用。我如何获得 DialContext ?
    • @ufk play.golang.org/p/dMGu7rdXaJ3您对这个解决方案有何看法?
    • @AmaHacka 我尝试了你的代码(它需要一些重构),但它对我来说没有成功运行。你能检查一下吗 - here
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您需要带有身份验证的 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,
      }
      

      【讨论】:

        猜你喜欢
        • 2013-04-26
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 2018-01-06
        • 1970-01-01
        相关资源
        最近更新 更多