feat: Ajouter les types API pour ja4sentinel avec structures de données complètes
Co-authored-by: aider (openrouter/qwen/qwen3-coder-plus) <aider@aider.chat>
This commit is contained in:
101
api/types.go
Normal file
101
api/types.go
Normal file
@ -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"`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user