diff --git a/api/types.go b/api/types.go new file mode 100644 index 0000000..293e7a3 --- /dev/null +++ b/api/types.go @@ -0,0 +1,101 @@ +package api + +// ServiceLog représente un log interne du service ja4sentinel (diagnostic). +type ServiceLog struct { + Level string `json:"level"` + Component string `json:"component"` + Message string `json:"message"` + Details map[string]string `json:"details,omitempty"` +} + +// Config contient la configuration réseau et TLS de base. +type Config struct { + Interface string `json:"interface"` + ListenPorts []uint16 `json:"listen_ports"` + BPFFilter string `json:"bpf_filter"` +} + +// IPMeta contient les métadonnées IP pour fingerprinting de stack. +type IPMeta struct { + TTL uint8 `json:"ttl"` + TotalLength uint16 `json:"total_length"` + IPID uint16 `json:"id"` + DF bool `json:"df"` +} + +// TCPMeta contient les métadonnées TCP pour fingerprinting de stack. +type TCPMeta struct { + WindowSize uint16 `json:"window_size"` + MSS uint16 `json:"mss"` + WindowScale uint8 `json:"window_scale"` + Options []string `json:"options"` +} + +// RawPacket représente un paquet brut capturé sur le réseau. +type RawPacket struct { + Data []byte `json:"data"` + Timestamp int64 `json:"timestamp"` +} + +// TLSClientHello représente un ClientHello TLS client, avec meta IP/TCP. +type TLSClientHello struct { + SrcIP string `json:"src_ip"` + SrcPort uint16 `json:"src_port"` + DstIP string `json:"dst_ip"` + DstPort uint16 `json:"dst_port"` + Payload []byte `json:"payload"` + + IPMeta IPMeta `json:"ip_meta"` + TCPMeta TCPMeta `json:"tcp_meta"` +} + +// Fingerprints contient les empreintes TLS pour un flux client. +type Fingerprints struct { + JA4 string `json:"ja4"` + JA4Hash string `json:"ja4_hash"` + JA3 string `json:"ja3,omitempty"` + JA3Hash string `json:"ja3_hash,omitempty"` +} + +// LogRecord est un enregistrement de log final, sérialisé en JSON objet plat. +type LogRecord struct { + // Adresse IP source (client) + SrcIP string `json:"src_ip"` + // Port source (client) + SrcPort uint16 `json:"src_port"` + // Adresse IP destination (serveur) + DstIP string `json:"dst_ip"` + // Port destination (serveur) + DstPort uint16 `json:"dst_port"` + + // Métadonnées IP (flatten) + IPTTL uint8 `json:"ip_meta_ttl"` + IPTotalLen uint16 `json:"ip_meta_total_length"` + IPID uint16 `json:"ip_meta_id"` + IPDF bool `json:"ip_meta_df"` + + // Métadonnées TCP (flatten) + TCPWindow uint16 `json:"tcp_meta_window_size"` + TCPMSS uint16 `json:"tcp_meta_mss"` + TCPWScale uint8 `json:"tcp_meta_window_scale"` + TCPOptions string `json:"tcp_meta_options"` + + // Empreintes + JA4 string `json:"ja4"` + JA4Hash string `json:"ja4_hash"` + JA3 string `json:"ja3,omitempty"` + JA3Hash string `json:"ja3_hash,omitempty"` +} + +// OutputConfig configure une sortie de logs. +type OutputConfig struct { + Type string `json:"type"` + Enabled bool `json:"enabled"` + Params map[string]string `json:"params"` +} + +// AppConfig est la configuration complète de ja4sentinel. +type AppConfig struct { + Core Config `json:"core"` + Outputs []OutputConfig `json:"outputs"` +}