Http получить запрос через socks5 |Ошибка EOF - PullRequest
0 голосов
/ 20 сентября 2018

Что я пытаюсь сделать:
Построить пакет (позднее использование), который предоставляет метод для выполнения запроса get на любую страницу через данный прокси-сервер socks5.

Моя проблема:
Когда я пытаюсь запросить страницу с SSL (https), я получаю следующую ошибку:

Ошибка при выполнении запроса Получить https://www.xxxxxxx.com: socks connect tcp 83.234.8.214:4145->www.xxxxxxx.com:443: EOF

Однако запрос http://www.google.com работает нормально.Таким образом, должна быть проблема с соединением SSL.Не могу представить, почему это не работает, так как я не очень разбираюсь в SSL-соединениях.End of file не имеет смысла для меня.

Мой текущий код:

func main() {
    // public socks5 - worked when I created this question
    proxy_addr := "83.234.8.214:4145"

    // With this address I get the error
    web_addr := "https://www.whatismyip.com"

    // Requesting google works fine
    //web_addr := "http://www.google.com"

    dialer, err := proxy.SOCKS5("tcp", proxy_addr, nil, proxy.Direct)
    handleError(err, "error creating dialer")

    httpTransport := &http.Transport{}
    httpClient := &http.Client{Transport: httpTransport}

    httpTransport.DialTLS = dialer.Dial

    req, err := http.NewRequest("GET", web_addr, nil)
    handleError(err, "error creating request")

    httpClient.Timeout = 5 * time.Second

    resp, err := httpClient.Do(req)
    handleError(err, "error executing request")

    defer resp.Body.Close()
    b, err := ioutil.ReadAll(resp.Body)
    handleError(err, "error reading body")

    fmt.Println(string(b))
}

func handleError(err error, msg string) {
    if err != nil {
        log.Fatal(err)
    }
}

Так чего мне здесь не хватает, чтобы иметь дело с ssl-соединениями?

Большое спасибо.


Редактировать 1:

В случае, если кто-то подумает, что это проблема с whatismyip.com Я сделалеще несколько тестов:

1 Ответ

0 голосов
/ 28 сентября 2018

Соединение между вашей программой и прокси-сервером socks5 происходит не через SSL / TLS

Поэтому вам следует изменить строку
httpTransport.DialTLS = dialer.Dial
на
httpTransport.Dial = dialer.Dial

Я проверил https://www.whatismyip.com и https://www.google.com. URL-адреса загружаются нормально.
Для теста я настроил службу 3proxy на своем сервере, протестировал ваш код с фиксированной линией и проверил журналы 3proxy.

Все сделанные запросы были в журналах прокси-сервера.

Если вам нужна дополнительная помощь - пожалуйста, дайте мне знать, я помогу


На что обратить внимание :

  • Прокси-серверы Socks5 должны поддерживать SSL-соединения.
  • Код из вопроса не будет работать с этим ответом, так как прокси (используемый в коде) не поддерживает соединения SSL.
...