# credits: https://gist.github.com/calebmadrigal/fdb8855a6d05c87bbb0254a1424ee582 import sys import yaml import requests import json import hmac import hashlib IDENTITIES_PATH = "identities.yaml" WEBHOOK_URL = "https://cloud.flueren.eu/public/update.php" WEBHOOK_SECRET = "CHANGE-THIS" def parse_wifi_map(map_path): # read scan results with open(map_path, 'r') as f: wifi_map = yaml.safe_load(f) # read known identities with open(IDENTITIES_PATH, 'r') as f: identities = yaml.safe_load(f)['identities'] print("Known identities:") for identity in identities: print('mac = {}, name = {}'.format(identity['mac'],identity['name'])) devices = set() filtered_identities = set() # filter scan results for known identities for ssid in wifi_map: #print('ssid = {}'.format(ssid)) ssid_node = wifi_map[ssid] for bssid in ssid_node: #print('\tbssid = {}'.format(bssid)) bssid_node = ssid_node[bssid] if 'devices' in bssid_node: for device in bssid_node['devices']: devices |= {device} #print('\t\tdevice = {}'.format(device)) for identity in identities: if identity['mac'] == device: filtered_identities |= (identity['name']) #print('\n\nSSID count: {}, Device count: {}'.format(len(wifi_map), len(devices))) print('\nFiltered identities:') print(filtered_identities) return filtered_identities if __name__ == '__main__': wifi_map_path = 'wifi_map.yaml' if len(sys.argv) > 1: wifi_map_path = sys.argv[1] filtered_identities = parse_wifi_map(wifi_map_path) # build request json_payload = json.dumps(filtered_identities).encode("utf-8") signature = hmac.new( key=bytes(WEBHOOK_SECRET, "utf-8"), msg=json_payload, digestmod=hashlib.sha256 ).hexdigest() req_headers = { 'Content-Type': 'application/json', 'x-hmac-hash': signature } # send request r = requests.post(url=WEBHOOK_URL, data=json_payload, headers=req_headers) print("Upload response:") print(r.status_code)