55 lines
2.5 KiB
Python
55 lines
2.5 KiB
Python
from statistics import mean
|
|
|
|
def merge_ssid_summaries(summary_lists):
|
|
merged = {}
|
|
|
|
for summary in summary_lists:
|
|
for entry in summary:
|
|
ssid = entry['SSID']
|
|
key = ssid # You could also key on both SSID + BSSID set if you're feeling spicy
|
|
|
|
if key not in merged:
|
|
merged[key] = {
|
|
'SSID': ssid,
|
|
'Hidden': entry['Hidden'],
|
|
'Open': entry['Open'],
|
|
'BSSID_Count': entry['BSSID_Count'],
|
|
'BSSIDs': set(entry['BSSIDs'].split(";")),
|
|
'Avg_Signal': [entry['Avg_Signal']],
|
|
'Max_Signal': entry['Max_Signal'],
|
|
'Min_Signal': entry['Min_Signal'],
|
|
'Clients_Seen': entry['Clients_Seen'],
|
|
'CiscoAvgClients': [entry['CiscoAvgClients']],
|
|
'CiscoMaxClients': entry['CiscoMaxClients'],
|
|
'PacketCount': entry['PacketCount']
|
|
}
|
|
else:
|
|
merged[key]['Hidden'] = merged[key]['Hidden'] or entry['Hidden']
|
|
merged[key]['Open'] = merged[key]['Open'] and entry['Open']
|
|
merged[key]['BSSIDs'].update(entry['BSSIDs'].split(";"))
|
|
merged[key]['Avg_Signal'].append(entry['Avg_Signal'])
|
|
merged[key]['Max_Signal'] = max(merged[key]['Max_Signal'], entry['Max_Signal'])
|
|
merged[key]['Min_Signal'] = min(merged[key]['Min_Signal'], entry['Min_Signal'])
|
|
merged[key]['Clients_Seen'] += entry['Clients_Seen']
|
|
merged[key]['CiscoAvgClients'].append(entry['CiscoAvgClients'])
|
|
merged[key]['CiscoMaxClients'] = max(merged[key]['CiscoMaxClients'], entry['CiscoMaxClients'])
|
|
merged[key]['PacketCount'] += entry['PacketCount']
|
|
|
|
final_list = []
|
|
for ssid, data in merged.items():
|
|
final_list.append({
|
|
'SSID': data['SSID'],
|
|
'Hidden': data['Hidden'],
|
|
'Open': data['Open'],
|
|
'BSSID_Count': len(data['BSSIDs']),
|
|
'BSSIDs': ";".join(sorted(data['BSSIDs'])),
|
|
'Avg_Signal': round(mean(data['Avg_Signal']), 2),
|
|
'Max_Signal': data['Max_Signal'],
|
|
'Min_Signal': data['Min_Signal'],
|
|
'Clients_Seen': data['Clients_Seen'],
|
|
'CiscoAvgClients': round(mean(data['CiscoAvgClients']), 2),
|
|
'CiscoMaxClients': data['CiscoMaxClients'],
|
|
'PacketCount': data['PacketCount']
|
|
})
|
|
|
|
return final_list
|