mirror of
https://git.phreedom.club/localhost_frssoft/compy.git
synced 2024-11-27 10:31:31 +00:00
fix mitm for http1 proxy connections
Add back Hijacking support for http1.1 CONNECT requests.
This commit is contained in:
parent
fd53c9cb8c
commit
f9a6377450
|
@ -3,6 +3,7 @@ package proxy
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -97,14 +98,23 @@ func (p *Proxy) handleConnect(w http.ResponseWriter, r *http.Request) error {
|
||||||
return fmt.Errorf("CONNECT received but mitm is not enabled")
|
return fmt.Errorf("CONNECT received but mitm is not enabled")
|
||||||
}
|
}
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
var conn net.Conn
|
||||||
|
if h, ok := w.(http.Hijacker); ok {
|
||||||
|
conn, _, _ = h.Hijack()
|
||||||
|
} else {
|
||||||
fw := w.(FlushWriter)
|
fw := w.(FlushWriter)
|
||||||
fw.Flush()
|
fw.Flush()
|
||||||
conn := newMitmConn(fw, r.Body, r.RemoteAddr)
|
mconn := newMitmConn(fw, r.Body, r.RemoteAddr)
|
||||||
|
conn = mconn
|
||||||
|
defer func() {
|
||||||
|
<-mconn.closed
|
||||||
|
}()
|
||||||
|
}
|
||||||
sconn, err := p.ml.Serve(conn, r.Host)
|
sconn, err := p.ml.Serve(conn, r.Host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
conn.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
sconn.Close() // TODO: reuse this connection for https requests
|
sconn.Close() // TODO: reuse this connection for https requests
|
||||||
<-conn.closed
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue