fix: client hello

This commit is contained in:
LiquidTheDangerous 2024-08-11 18:54:06 +05:00
parent 4c0f5ca6c8
commit 1f7fe642d5
2 changed files with 50 additions and 2 deletions

48
proxy/client_hello.go Normal file
View File

@ -0,0 +1,48 @@
package proxy
import (
"encoding/binary"
"io"
)
const headerLen = 5
type ClientHello struct {
Header ClientHelloHeader
Raw []byte //Header + Payload
RawHeader []byte
RawPayload []byte
}
type ClientHelloHeader struct {
Type byte
ProtoVersion uint16
PayloadLen uint16
}
func ReadClientHello(r io.Reader) (*ClientHello, error) {
var rawHeader [5]byte
_, err := io.ReadFull(r, rawHeader[:])
if err != nil {
return nil, err
}
header := ClientHelloHeader{
Type: rawHeader[0],
ProtoVersion: binary.BigEndian.Uint16(rawHeader[1:3]),
PayloadLen: binary.BigEndian.Uint16(rawHeader[3:5]),
}
raw := make([]byte, header.PayloadLen+headerLen)
copy(raw[0:headerLen], rawHeader[:])
_, err = io.ReadFull(r, raw[headerLen:])
if err != nil {
return nil, err
}
hello := &ClientHello{
Header: header,
Raw: raw,
}
hello.RawHeader = hello.Raw[:headerLen]
hello.RawPayload = hello.Raw[headerLen:]
return hello, nil
}

View File

@ -45,12 +45,12 @@ func (pxy *Proxy) handleHttps(lConn *net.TCPConn, exploit bool, initPkt *packet.
log.Debug("[HTTPS] Sent 200 Connection Estabalished to ", lConn.RemoteAddr())
// Read client hello
tmpBuffer := make([]byte, 4096)
clientHello, err := ReadBytes(lConn, tmpBuffer)
hello, err := ReadClientHello(lConn)
if err != nil {
log.Debug("[HTTPS] Error reading client hello from the client", err)
return
}
clientHello := hello.Raw
log.Debug("[HTTPS] Client sent hello ", len(clientHello), "bytes")