«EOF» при оформлении запроса через прокси - PullRequest
0 голосов
/ 30 ноября 2018

Я использую ssh для создания прокси-соединения с экземпляром EC2:

ssh -v -D 8123 ubuntu@some.ip.address

, и я написал очень простую программу Go, которая делает http-запросы:

package main

import (
    "io/ioutil"
    "net/http"
    "os"
    "log"
    "fmt"

)

func main(){

    resp, err := http.Get("http://example.com")

    if err != nil {
        log.Println(err)
        os.Exit(1)
    }

    fmt.Println(string(ioutil.ReadAll(resp.Body)))

}

Когда я запускаю свою программу нормально, она работает как положено.Однако, когда я использую HTTP_PROXY env var ( godoc , пример ) для указания прокси-сервера http (или если я создаю собственный http-клиент, который использует этот прокси для транспорта), я получаюследующее:

HTTP_PROXY=localhost:8123 ./main 2018/11/29 23:33:27 Get http://example.com: EOF

и отладка для моего сеанса SSH, на котором я установил прокси-сервер, дает мне:

debug1: Connection to port 8123 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
debug1: channel 3: free: dynamic-tcpip, nchannels 4

Когда я настраиваю Wi-Fi-адаптер моего macbook для использования localhost:8123как прокси SOCKS, похоже, работает.Мой публичный IP-адрес меняется, и трафик, кажется, течет (на самом деле, я использую его сейчас).Есть идеи, почему у моей программы Go проблемы?

1 Ответ

0 голосов
/ 30 ноября 2018

socks -D создает прокси SOCKS.В своем тесте вы установили HTTP-прокси.Прокси-серверы SOCKS и HTTP-прокси используют разные протоколы, а это означает, что запрос, сделанный вашим клиентом, не соответствует ожидаемому прокси-серверу, и поэтому он не выполняется.

Для использования прокси-сервера SOCKS с Go см. Создание go socks5клиент .

...