Enhance analyze_pcap function to return additional SSID metrics including number of BSSIDs, average signal, max signal, and number of channels for improved analysis.

This commit is contained in:
Yaro Kasear 2025-04-17 10:12:23 -05:00
parent cc4f4f0adb
commit 246dfb7aee

View file

@ -378,6 +378,8 @@ def analyze_pcap(pcapng_path, start_ts, end_ts, ap_bssid, ap_channel):
except Exception as e: except Exception as e:
continue continue
our_ssid = bssid_to_ssid.get(ap_bssid, None)
clients_on_ap = get_clients_on_ap(filtered_packets, ap_bssid) clients_on_ap = get_clients_on_ap(filtered_packets, ap_bssid)
clients_on_channel = get_clients_on_channel(filtered_packets, ap_channel, ap_bssid) clients_on_channel = get_clients_on_channel(filtered_packets, ap_channel, ap_bssid)
aps_on_channel = get_aps_on_channel(filtered_packets, ap_channel) aps_on_channel = get_aps_on_channel(filtered_packets, ap_channel)
@ -385,11 +387,18 @@ def analyze_pcap(pcapng_path, start_ts, end_ts, ap_bssid, ap_channel):
unlinked_devices = get_unlinked_devices(filtered_packets, ap_channel) unlinked_devices = get_unlinked_devices(filtered_packets, ap_channel)
cisco_avg_reported_clients = mean(cisco_reported_clients) if cisco_reported_clients else 0 cisco_avg_reported_clients = mean(cisco_reported_clients) if cisco_reported_clients else 0
cisco_max_reported_clients = max(cisco_reported_clients) if cisco_reported_clients else 0 cisco_max_reported_clients = max(cisco_reported_clients) if cisco_reported_clients else 0
num_bssids = len(ssid_to_bssids[our_ssid]) if our_ssid in ssid_to_bssids else 0
average_signal = mean(ssid_signals[our_ssid]) if our_ssid in ssid_signals else 0
max_ssid_signal = max(ssid_signals[our_ssid]) if our_ssid in ssid_signals else 0
num_channels_ssid = len(ssid_to_bssids[our_ssid]) if our_ssid in ssid_to_bssids else 0
finally: finally:
cap.close() cap.close()
return clients_on_ap, clients_on_channel, aps_on_channel, avg_ap_signal, max_ap_signal, unlinked_devices, cisco_avg_reported_clients, cisco_max_reported_clients return (clients_on_ap, clients_on_channel, aps_on_channel,
avg_ap_signal, max_ap_signal, unlinked_devices,
cisco_avg_reported_clients, cisco_max_reported_clients, num_bssids,
average_signal, max_ssid_signal, num_channels_ssid)
def main(): def main():
args = parse_args() args = parse_args()
@ -418,7 +427,8 @@ def main():
fieldnames = reader.fieldnames + [ fieldnames = reader.fieldnames + [
'ClientsOnAP', 'ClientsOnChannel', 'APsOnChannel', 'ClientsOnAP', 'ClientsOnChannel', 'APsOnChannel',
'AvgAPSignal', 'StrongestAPSignal', 'UnlinkedDevices', 'AvgAPSignal', 'StrongestAPSignal', 'UnlinkedDevices',
'CiscoAvgReportedClients', 'CiscoMaxReportedClients' 'CiscoAvgReportedClients', 'CiscoMaxReportedClients', 'NumberofBSSIDsOnSSID',
'AvgSSIDSignal', 'MaxSSIDSignal', 'NumberofChannelsOnSSID'
] ]
writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader() writer.writeheader()
@ -433,7 +443,7 @@ def main():
writer.writerow(row) writer.writerow(row)
continue continue
clients_ap, clients_chan, aps_chan, avg_signal, strongest_signal, unlinked, cisco_avg_reported_clients, cisco_max_reported_clients = analyze_pcap(args.pcapng, tstart, tend, ap_bssid, ap_channel) clients_ap, clients_chan, aps_chan, avg_signal, strongest_signal, unlinked, cisco_avg_reported_clients, cisco_max_reported_clients, num_bssids, average_signal, max_ssid_signal = analyze_pcap(args.pcapng, tstart, tend, ap_bssid, ap_channel)
row.update({ row.update({
'ClientsOnAP': clients_ap, 'ClientsOnAP': clients_ap,
@ -443,7 +453,11 @@ def main():
'StrongestAPSignal': strongest_signal, 'StrongestAPSignal': strongest_signal,
'UnlinkedDevices': unlinked, 'UnlinkedDevices': unlinked,
'CiscoAvgReportedClients': cisco_avg_reported_clients, 'CiscoAvgReportedClients': cisco_avg_reported_clients,
'CiscoMaxReportedClients': cisco_max_reported_clients 'CiscoMaxReportedClients': cisco_max_reported_clients,
'NumberofBSSIDs': num_bssids,
'AvgSSIDSignal': average_signal,
'MaxSSIDSignal': max_ssid_signal,
'NumberofChannelsOnSSID': num_bssids
}) })
writer.writerow(row) writer.writerow(row)