gpt4 book ai didi

http - 无法在Golang中使用socks5代理-读取:对等连接重置

转载 作者:行者123 更新时间:2023-12-01 22:11:05 24 4
gpt4 key购买 nike

我有一个运行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检查连接,并显示 已连接
现在,我想将go程序中的任何请求用作tor的代理。我试过了 -
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
我也尝试了其他方法,特别提到了 herehere,但始终遇到相同的错误- read: connection reset by peer请在这里帮助哪个部分不正确。
谢谢。
--------------------我尝试过的另一种方法----------------
正如其中一个链接所述,我也尝试了这段代码-
const (
PROXY_ADDR = "127.0.0.1:11000"
URL = "http://facebookcorewwwi.onion"
)

func main() {
// create a socks5 dialer
dialer, err := proxy.SOCKS5("tcp", PROXY_ADDR, nil, proxy.Direct)
if err != nil {
fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
os.Exit(1)
}

dialContext := func(ctx context.Context, network, address string) (net.Conn, error) {
// do anything with ctx

return dialer.Dial(network, address)
}

// setup a http client
httpTransport := &http.Transport{
DialContext: dialContext,
}
httpClient := &http.Client{Transport: httpTransport}

// create a request
req, err := http.NewRequest("GET", URL, nil)
if err != nil {
fmt.Fprintln(os.Stderr, "can't create request:", err)
os.Exit(2)
}
resp, err := httpClient.Do(req)
if err != nil {
fmt.Fprintln(os.Stderr, "cannot make get request: ", err)
os.Exit(2)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Fprintln(os.Stderr, "cannot read response body: ", err)
os.Exit(2)
}
fmt.Println("received response -> ", body)
}
但收到错误-
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 localhost:9050 --socks5-hostname localhost:9050 -s https://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))
}

关于http - 无法在Golang中使用socks5代理-读取:对等连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63656117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com