From c6fb5ca049171f88166a3f11cd72ad1b94342317 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Tue, 29 Apr 2025 11:07:37 -0500 Subject: [PATCH] Add debug print statements to query_metrics for packet analysis insights --- enrichment/indexed_capture.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/enrichment/indexed_capture.py b/enrichment/indexed_capture.py index 32f25b7..9a6047a 100644 --- a/enrichment/indexed_capture.py +++ b/enrichment/indexed_capture.py @@ -139,64 +139,66 @@ class IndexedCapture: def query_metrics(self, start_ts, end_ts, ap_bssid, ap_channel): packets = self.get_packets_in_time_range(start_ts, end_ts) print(f"[DEBUG] Packets in window: {len(packets)} between {start_ts} and {end_ts}") - + # Build local windowed structures window_clients = defaultdict(set) window_aps = defaultdict(set) window_signals = defaultdict(list) - + for packet in packets: try: if 'radiotap' not in packet or 'wlan' not in packet: continue - + wlan = packet.wlan radio = packet.radiotap - + sa = getattr(wlan, 'sa', '').lower() da = getattr(wlan, 'da', '').lower() bssid = getattr(wlan, 'bssid', '').lower() - + if hasattr(radio, 'channel') and hasattr(radio.channel, 'freq'): freq = int(radio.channel.freq) channel = get_channel_from_freq(freq) else: continue - + + print(f"[DEBUG] Packet ts={packet.frame_info.time_epoch}, freq={freq}, resolved_channel={channel}, ap_channel={ap_channel}") + # Track APs (beacons / probe responses only!) subtype = int(getattr(wlan, 'type_subtype', '0'), 16) if subtype in (5, 8) and bssid: window_aps[channel].add(bssid) - + # Track clients for mac in (sa, da): if mac and mac != 'ff:ff:ff:ff:ff:ff': window_clients[channel].add(mac) - + # Track signals signal = getattr(radio, 'dbm_antsignal', None) if signal: window_signals[channel].append(int(signal)) - + except Exception: continue - + clients_on_ap = self._count_clients_on_ap(packets, ap_bssid) clients_on_channel = len(window_clients.get(ap_channel, [])) aps_on_channel = len(window_aps.get(ap_channel, [])) - + avg_ap_signal = mean(window_signals[ap_channel]) if window_signals.get(ap_channel) else 0 max_ap_signal = max(window_signals[ap_channel]) if window_signals.get(ap_channel) else 0 - + unlinked_devices = self._count_unlinked_devices(packets, ap_channel) - + our_ssid = self.bssid_to_ssid.get(ap_bssid) num_bssids = len(self.ssid_to_bssids.get(our_ssid, [])) if our_ssid else 0 avg_ssid_signal = mean(self.ssid_signals.get(our_ssid, [])) if our_ssid else 0 max_ssid_signal = max(self.ssid_signals.get(our_ssid, [])) if our_ssid else 0 num_channels_ssid = len(self.ssid_to_bssids.get(our_ssid, [])) if our_ssid else 0 packet_count = len(packets) - + return ( clients_on_ap, clients_on_channel, aps_on_channel, avg_ap_signal, max_ap_signal, unlinked_devices,