Http 无法在golang中使用socks5代理-读取:对等方重置连接

Http 无法在golang中使用socks5代理-读取:对等方重置连接,http,go,proxy,tor,socks,Http,Go,Proxy,Tor,Socks,我有一个运行tor的dockerfile- FROM alpine:edge RUN apk update && apk add tor EXPOSE 9050 USER tor CMD ["/usr/bin/tor"] 并使用命令-docker run--name-tor-p 11000:9050-tor运行它 并使用-telnet 127.0.0.1 11000检查连接,结果显示已连接 现在我想使用tor作为代理,而任何来自go程序的请求。我试过了- p

我有一个运行tor的dockerfile-

FROM alpine:edge
RUN apk update && apk add tor
EXPOSE 9050
USER tor
CMD ["/usr/bin/tor"]
并使用命令-
docker run--name-tor-p 11000:9050-tor运行它

并使用-
telnet 127.0.0.1 11000检查连接,结果显示已连接

现在我想使用tor作为代理,而任何来自go程序的请求。我试过了-

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "time"
)

func main() {
    proxyUrl, err := url.Parse("socks5://127.0.0.1:11000")
    if err != nil {
        // TODO handle me
        panic(err)
    }

    cl := http.Client{
        Transport: &http.Transport{
            Proxy: http.ProxyURL(proxyUrl),
        },
        Timeout: 18000 * time.Millisecond,
    }

    resp, err := cl.Get("http://google.com")
    if err != nil {
        // TODO handle me
        panic(err)
    }

    // TODO work with the response
    fmt.Println(resp)
}
但是运行这个程序会产生错误-

panic: Get http://google.com: socks connect tcp 127.0.0.1:11000->google.com:80: read tcp 127.0.0.1:59630->127.0.0.1:11000: read: connection reset by peer

goroutine 1 [running]: <stacktrace>

exit status 2
但收到错误-

cannot make get request:  Get http://facebookcorewwwi.onion: socks connect tcp 127.0.0.1:11000->facebookcorewwwi.onion:80: read tcp 127.0.0.1:59826->127.0.0.1:11000: read: connection reset by peer
exit status 2

在确保tor在端口9050上正常工作后,可以获得任何帮助。

。 尝试以下curl命令以确保tor正常工作

curl--socks5本地主机:9050--socks5主机名本地主机:9050-shttps://wtfismyip.com/json

你能试试这个吗

package main

import (
    "context"
    "fmt"
    "io/ioutil"
    "net"
    "net/http"
    "golang.org/x/net/proxy"
)

func main() {
    proxyUrl := "127.0.0.1:9050"
    dialer, err := proxy.SOCKS5("tcp", proxyUrl, nil, proxy.Direct)
    dialContext := func(ctx context.Context, network, address string) (net.Conn, error) {
        return dialer.Dial(network, address)
    }
    transport := &http.Transport{DialContext: dialContext,
        DisableKeepAlives: true}
    cl := &http.Client{Transport: transport}

    resp, err := cl.Get("https://wtfismyip.com/json")
    if err != nil {
        // TODO handle me
        panic(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    // TODO work with the response
    if err != nil {
        fmt.Println("body read failed")
    }
    fmt.Println(string(body))
}

正如上面的回答/评论中所建议的,主要问题是socks5与停靠的tor容器的连接

找到了解决方案,我只需要修改dockerfile-

FROM alpine:edge
RUN apk update && apk add tor
RUN cp /etc/tor/torrc.sample /etc/tor/torrc && echo "SocksPort 0.0.0.0:9050" > /etc/tor/torrc
EXPOSE 9050
CMD ["/usr/bin/tor"]

其他代码块工作正常。

您能检查一下您是否能够使用此代理和Firefox或smth其他工具来丰富“”吗?@AmaHacka找到了问题和解决方案
FROM alpine:edge
RUN apk update && apk add tor
RUN cp /etc/tor/torrc.sample /etc/tor/torrc && echo "SocksPort 0.0.0.0:9050" > /etc/tor/torrc
EXPOSE 9050
CMD ["/usr/bin/tor"]