Compare commits

...

2 commits

View file

@ -344,6 +344,7 @@ def analyze_pcap(pcapng_path, start_ts, end_ts, ap_bssid, ap_channel):
ssid = None ssid = None
hidden_ssid = False hidden_ssid = False
is_open = True
for tag in tags: for tag in tags:
tag_number = tag.get('wlan.tag.number') tag_number = tag.get('wlan.tag.number')
@ -367,6 +368,9 @@ def analyze_pcap(pcapng_path, start_ts, end_ts, ap_bssid, ap_channel):
cisco_ssid_clients[ssid].append(num_clients) cisco_ssid_clients[ssid].append(num_clients)
except (TypeError, ValueError): except (TypeError, ValueError):
pass pass
if tag_number in {'48', '221'}:
is_open = False
if ssid: if ssid:
ssid_hidden_status[ssid] = hidden_ssid ssid_hidden_status[ssid] = hidden_ssid
@ -417,18 +421,21 @@ def analyze_pcap(pcapng_path, start_ts, end_ts, ap_bssid, ap_channel):
signals = ssid_signals.get(ssid, []) signals = ssid_signals.get(ssid, [])
ssid_summary.append({ ssid_summary.append({
'SSID': ssid, 'SSID': ssid,
'Hidden': ssid_hidden_status.get(ssid, False), 'Hidden': ssid == '',
'Open': is_open,
'BSSID_Count': len(bssids), 'BSSID_Count': len(bssids),
'BSSIDs': ";".join(sorted(bssids)),
'Avg_Signal': mean(signals) if signals else 0, 'Avg_Signal': mean(signals) if signals else 0,
'Max_Signal': max(signals) if signals else 0, 'Max_Signal': max(signals) if signals else 0,
'Min_Signal': min(signals) if signals else 0, 'Min_Signal': min(signals) if signals else 0,
'Clients_Seen': len(ssid_clients.get(ssid, [])), 'Clients_Seen': len(ssid_clients.get(ssid, [])),
'CiscoAvgClients': round(mean(cisco_ssid_clients.get(ssid, [])), 2) if cisco_ssid_clients.get(ssid) else 0, 'CiscoAvgClients': round(mean(cisco_reported_clients), 2) if cisco_reported_clients else 0,
'CiscoMaxClients': max(cisco_ssid_clients.get(ssid, [])) if cisco_ssid_clients.get(ssid) else 0 'CiscoMaxClients': max(cisco_reported_clients) if cisco_reported_clients else 0
}) })
finally: finally:
cap.close() cap.close()
@ -509,7 +516,7 @@ def main():
ssid_outfile = args.output.replace('.csv+rf.csv', '-ssid-metrics.csv') ssid_outfile = args.output.replace('.csv+rf.csv', '-ssid-metrics.csv')
with open(ssid_outfile, 'w', newline='', encoding='utf-8') as f: with open(ssid_outfile, 'w', newline='', encoding='utf-8') as f:
fieldnames = [ fieldnames = [
'SSID', 'Hidden', 'BSSID_Count', 'Avg_Signal', 'Max_Signal', 'SSID', 'Hidden', 'Open', 'BSSID_Count', 'BSSIDs', 'Avg_Signal', 'Max_Signal',
'Min_Signal', 'Clients_Seen', 'CiscoAvgClients', 'CiscoMaxClients' 'Min_Signal', 'Clients_Seen', 'CiscoAvgClients', 'CiscoMaxClients'
] ]
ssid_writer = csv.DictWriter(f, fieldnames=fieldnames) ssid_writer = csv.DictWriter(f, fieldnames=fieldnames)