test backend codec ndpi
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s

This commit is contained in:
2026-03-06 22:05:45 +01:00
parent 991f26e5f2
commit 25bb7be29d
11 changed files with 1144 additions and 49 deletions

View File

@@ -31,6 +31,7 @@ from src.utilities.interface_bridge_helpers import (
check_interface_up,
get_bridge_ports_once,
)
from src.utilities.ndpi_classifier import ndpi_classifier
from src.Models.etherType import EtherTypeEnum, ethertype_from_int
from src.Models.ip_protocol import IPProtocolEnum, protocol_from_number
@@ -73,6 +74,14 @@ class PacketInfo(TypedDict, total=False):
dst_ip: Optional[str]
src_port: Optional[int]
dst_port: Optional[int]
app_protocol: Optional[str]
app_master_protocol: Optional[str]
app_category: Optional[str]
app_confidence: Optional[str]
app_hostname: Optional[str]
app_is_encrypted: Optional[bool]
app_risk_score: Optional[int]
dpi_metadata: Optional[Dict[str, Any]]
# small bounded buffer for packets produced before shared_objects is ready
@@ -163,6 +172,14 @@ def parse_packet(pkt, bridge_label: str) -> None:
"dst_ip": None,
"src_port": None,
"dst_port": None,
"app_protocol": None,
"app_master_protocol": None,
"app_category": None,
"app_confidence": None,
"app_hostname": None,
"app_is_encrypted": None,
"app_risk_score": None,
"dpi_metadata": None,
}
# Ethernet layer
@@ -274,6 +291,14 @@ def parse_packet(pkt, bridge_label: str) -> None:
if Raw in pkt and not pkt_info.get("protocol_name"):
pkt_info["protocol_name"] = "RAW"
# Best-effort DPI enrichment using nDPI (optional dependency).
try:
dpi_info = ndpi_classifier.classify_packet(pkt)
if dpi_info:
pkt_info.update(dpi_info)
except Exception:
logger.exception("nDPI enrichment failed")
# Submit DB insert to shared web loop if available, otherwise buffer
try:
web_loop = getattr(shared_objects, "web_loop", None)
@@ -618,4 +643,4 @@ def get_internal_debug_state() -> dict:
for sid, s in sessions.items()
},
"buffer_len": len(_PACKET_BUFFER),
}
}