mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-16 16:57:08 +00:00
feat: detect tls handshake
This commit is contained in:
parent
ea38a0d3ed
commit
872e519c3d
@ -105,6 +105,11 @@ func (r *Rewriter) ProxyHTTPOrRaw(dst net.Conn, src net.Conn, destAddr string) (
|
|||||||
io.Copy(dst, reader)
|
io.Copy(dst, reader)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if strings.HasSuffix(destAddr, "443") && isTLSClientHello(reader) {
|
||||||
|
r.cache.Add(destAddr, destAddr)
|
||||||
|
log.LogDebugWithAddr(srcAddr, destAddr, "TLS ClientHello detected")
|
||||||
|
return
|
||||||
|
}
|
||||||
isHTTP, err := r.isHTTP(reader)
|
isHTTP, err := r.isHTTP(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("isHTTP: %w", err)
|
err = fmt.Errorf("isHTTP: %w", err)
|
||||||
@ -350,3 +355,25 @@ func isWebSocket(header []byte) bool {
|
|||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isTLSClientHello(reader *bufio.Reader) bool {
|
||||||
|
header, err := reader.Peek(3)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// TLS record type 0x16 = Handshake
|
||||||
|
if header[0] != 0x16 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// TLS version
|
||||||
|
versionMajor := header[1]
|
||||||
|
versionMinor := header[2]
|
||||||
|
if versionMajor != 0x03 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if versionMinor < 0x01 || versionMinor > 0x04 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user