я пытаюсь создать прокси-приложение через прокси http / https, но не получаю ответа - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь написать вращающийся прокси на Голанге. нет проблем при прокси http: скопировал запрос клиента и перенаправил его. Но когда я хочу переслать https - я не могу прочитать тело запроса, так как оно зашифровано. Я узнал, что с помощью HTTP CONNECT можно создать туннель tcp, но я не могу заставить сторонний прокси-сервер работать. Моя схема работы должна быть такой: 1) клиент -> 2) мой прокси-сервер -> 3) сторонний прокси-сервер -> 4) сайт, который хочет клиент но сейчас я застрял между 2 и 3 Кто-нибудь может мне помочь?

я получаю этот код в качестве примера https://github.com/hkwi/https_tproxy/blob/master/main.go

func handle(con net.Conn) {
    defer con.Close()

    req := &http.Request{
        Method: "CONNECT",
        Host:   con.LocalAddr().String(),
        URL:    &url.URL{},
    }

    conOut, err := net.DialTimeout("tcp", "EXTERNALPROXYIP:8080", 2*time.Second)
    if err != nil {
        log.Printf("proxy error %v", err)
    }
    defer conOut.Close()

    if err := req.WriteProxy(conOut); err != nil {
        log.Printf("proxy error %v", err)
    } else if res, err := http.ReadResponse(bufio.NewReader(conOut), req); err != nil {
        log.Printf("proxy error %v", err)
    } else if res.StatusCode != 200 {
        log.Printf("proxy error %v", err)
    } else {
        sent := make(chan bool)
        go func() {
            _, err := io.Copy(conOut, con)
            if err != nil {
                log.Printf("proxy error %v", err)
            }
            close(sent)
        }()
        _, err := io.Copy(con, res.Body)
        if err != nil {
            log.Printf("proxy error %v", err) ------> ERROR
        }
        _ = <-sent
    }

}

У меня есть проблема ошибка прокси неверного байта в длине фрагмента

...