Files
anubis-mirror/internal/fingerprint/tcp.go
2025-07-18 20:38:19 +00:00

47 lines
861 B
Go

package fingerprint
import (
"fmt"
"net/http"
"strings"
)
// JA4T represents a TCP fingerprint
type JA4T struct {
Window uint32
Options []uint8
MSS uint16
WindowScale uint8
}
func (j JA4T) String() string {
var sb strings.Builder
// Start with the window size
fmt.Fprintf(&sb, "%d", j.Window)
// Append each option
for i, opt := range j.Options {
if i == 0 {
fmt.Fprint(&sb, "_")
} else {
fmt.Fprint(&sb, "-")
}
fmt.Fprintf(&sb, "%d", opt)
}
// Append MSS and WindowScale
fmt.Fprintf(&sb, "_%d_%d", j.MSS, j.WindowScale)
return sb.String()
}
// GetTCPFingerprint extracts TCP fingerprint from HTTP request context
func GetTCPFingerprint(r *http.Request) *JA4T {
ptr := r.Context().Value(tcpFingerprintKey{})
if fpPtr, ok := ptr.(*JA4T); ok && ptr != nil && fpPtr != nil {
return fpPtr
}
return nil
}