stop sniffer
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 10s
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 10s
This commit is contained in:
@@ -690,11 +690,18 @@ def stop_afpacket_sniffer(session_id: Optional[str] = None, target: Optional[str
|
||||
if not s:
|
||||
logger.warning("Requested stop for unknown session %s", session_id)
|
||||
return
|
||||
discarded_ifaces = list({*s.get("ports", []), *s.get("sockets", {}).keys()})
|
||||
s["stop_event"].set()
|
||||
t = s.get("thread")
|
||||
if t and isinstance(t, threading.Thread):
|
||||
t.join(timeout=settings.sniffer_thread_join_timeout_seconds)
|
||||
_sync_bridge_telemetry()
|
||||
try:
|
||||
discarded = packet_tracker.discard_entries_for_ifaces(discarded_ifaces)
|
||||
if discarded:
|
||||
logger.info("Discarded %s pending packet-tracker entries for stopped session %s", discarded, session_id)
|
||||
except Exception:
|
||||
logger.exception("Failed to discard packet-tracker entries for session %s", session_id)
|
||||
logger.info("Stopped session %s", session_id)
|
||||
return
|
||||
|
||||
|
||||
@@ -55,6 +55,30 @@ class PacketTracker:
|
||||
self._stop_event.set()
|
||||
self._thread.join(timeout=settings.packet_tracker_stop_join_timeout_seconds)
|
||||
|
||||
def discard_entries_for_ifaces(self, ifaces: List[str]) -> int:
|
||||
"""Drop in-memory entries that belong to interfaces no longer being sniffed."""
|
||||
targets = {iface for iface in ifaces if iface}
|
||||
if not targets:
|
||||
return 0
|
||||
|
||||
removed = 0
|
||||
with self._lock:
|
||||
for correlation_key in list(self._entries.keys()):
|
||||
payload = self._entries[correlation_key]["payload"]
|
||||
related_ifaces = {
|
||||
payload.get("ingress_if"),
|
||||
payload.get("egress_if"),
|
||||
payload.get("capture_iface"),
|
||||
}
|
||||
telemetry_metadata = payload.get("telemetry_metadata") or {}
|
||||
if isinstance(telemetry_metadata, dict):
|
||||
related_ifaces.add(telemetry_metadata.get("iface"))
|
||||
|
||||
if related_ifaces & targets:
|
||||
self._entries.pop(correlation_key, None)
|
||||
removed += 1
|
||||
return removed
|
||||
|
||||
def observe_packet(self, pkt_info: Dict[str, Any]) -> str:
|
||||
"""Merge parsed packet information into a pending packet entry."""
|
||||
now_ts = time.time()
|
||||
|
||||
Reference in New Issue
Block a user