Add debug print statements to query_metrics for packet analysis insights

This commit is contained in:
Yaro Kasear 2025-04-29 11:07:37 -05:00
parent 6c8f542448
commit c6fb5ca049

View file

@ -139,64 +139,66 @@ class IndexedCapture:
def query_metrics(self, start_ts, end_ts, ap_bssid, ap_channel): def query_metrics(self, start_ts, end_ts, ap_bssid, ap_channel):
packets = self.get_packets_in_time_range(start_ts, end_ts) 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}") print(f"[DEBUG] Packets in window: {len(packets)} between {start_ts} and {end_ts}")
# Build local windowed structures # Build local windowed structures
window_clients = defaultdict(set) window_clients = defaultdict(set)
window_aps = defaultdict(set) window_aps = defaultdict(set)
window_signals = defaultdict(list) window_signals = defaultdict(list)
for packet in packets: for packet in packets:
try: try:
if 'radiotap' not in packet or 'wlan' not in packet: if 'radiotap' not in packet or 'wlan' not in packet:
continue continue
wlan = packet.wlan wlan = packet.wlan
radio = packet.radiotap radio = packet.radiotap
sa = getattr(wlan, 'sa', '').lower() sa = getattr(wlan, 'sa', '').lower()
da = getattr(wlan, 'da', '').lower() da = getattr(wlan, 'da', '').lower()
bssid = getattr(wlan, 'bssid', '').lower() bssid = getattr(wlan, 'bssid', '').lower()
if hasattr(radio, 'channel') and hasattr(radio.channel, 'freq'): if hasattr(radio, 'channel') and hasattr(radio.channel, 'freq'):
freq = int(radio.channel.freq) freq = int(radio.channel.freq)
channel = get_channel_from_freq(freq) channel = get_channel_from_freq(freq)
else: else:
continue 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!) # Track APs (beacons / probe responses only!)
subtype = int(getattr(wlan, 'type_subtype', '0'), 16) subtype = int(getattr(wlan, 'type_subtype', '0'), 16)
if subtype in (5, 8) and bssid: if subtype in (5, 8) and bssid:
window_aps[channel].add(bssid) window_aps[channel].add(bssid)
# Track clients # Track clients
for mac in (sa, da): for mac in (sa, da):
if mac and mac != 'ff:ff:ff:ff:ff:ff': if mac and mac != 'ff:ff:ff:ff:ff:ff':
window_clients[channel].add(mac) window_clients[channel].add(mac)
# Track signals # Track signals
signal = getattr(radio, 'dbm_antsignal', None) signal = getattr(radio, 'dbm_antsignal', None)
if signal: if signal:
window_signals[channel].append(int(signal)) window_signals[channel].append(int(signal))
except Exception: except Exception:
continue continue
clients_on_ap = self._count_clients_on_ap(packets, ap_bssid) clients_on_ap = self._count_clients_on_ap(packets, ap_bssid)
clients_on_channel = len(window_clients.get(ap_channel, [])) clients_on_channel = len(window_clients.get(ap_channel, []))
aps_on_channel = len(window_aps.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 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 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) unlinked_devices = self._count_unlinked_devices(packets, ap_channel)
our_ssid = self.bssid_to_ssid.get(ap_bssid) our_ssid = self.bssid_to_ssid.get(ap_bssid)
num_bssids = len(self.ssid_to_bssids.get(our_ssid, [])) if our_ssid else 0 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 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 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 num_channels_ssid = len(self.ssid_to_bssids.get(our_ssid, [])) if our_ssid else 0
packet_count = len(packets) packet_count = len(packets)
return ( return (
clients_on_ap, clients_on_channel, aps_on_channel, clients_on_ap, clients_on_channel, aps_on_channel,
avg_ap_signal, max_ap_signal, unlinked_devices, avg_ap_signal, max_ap_signal, unlinked_devices,