#!/usr/bin/python # some credits: https://gist.github.com/calebmadrigal/fdb8855a6d05c87bbb0254a1424ee582 import yaml import requests import json import hmac import hashlib import time BASE_URL = "http://localhost:8080/" WEBHOOK_SECRET = "CHANGE-THIS" WIFI_MAP_PATH = "wifi_map.yaml" UPLOAD_INTERVAL = 30 def get_identities(): identities_url = BASE_URL.rstrip('/') + '/identities.json' resp = requests.get(identities_url) if resp.status_code == 200: return resp.json() else: return [] 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 identities = get_identities() #print("Known identities:") #for identity in identities: # print('mac hash = {}, name = {}'.format(identity['mac_hash'],identity['name'])) filtered_identities = set() # filter scan results for known identities for ssid in wifi_map: ssid_node = wifi_map[ssid] for bssid in ssid_node: bssid_node = ssid_node[bssid] if 'devices' in bssid_node: for device in bssid_node['devices']: for identity in identities: mac_hash = hashlib.sha256(device.encode()).hexdigest() if identity['mac_hash'] == mac_hash: filtered_identities |= {identity['name']} #print('\nFiltered identities:',filtered_identities) return filtered_identities def upload_identities(identities): # build request json_payload = json.dumps(list(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 } webhook_url = BASE_URL.rstrip('/') + '/update.php' # send request r = requests.post(url=webhook_url, data=json_payload, headers=req_headers) #print("Upload response:", r.status_code) if __name__ == '__main__': while(1): filtered_identities = parse_wifi_map(WIFI_MAP_PATH) upload_identities(filtered_identities) time.sleep(UPLOAD_INTERVAL)