From 8d8e4b037651f708c24a314aacb49e4fef0d3fdd Mon Sep 17 00:00:00 2001 From: dadav <33197631+dadav@users.noreply.github.com> Date: Sun, 6 Oct 2019 22:30:43 +0200 Subject: [PATCH] Rename some vars and fix some bugs --- pwnagotchi/plugins/default/wigle.py | 50 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/pwnagotchi/plugins/default/wigle.py b/pwnagotchi/plugins/default/wigle.py index b87e71b..cba5745 100644 --- a/pwnagotchi/plugins/default/wigle.py +++ b/pwnagotchi/plugins/default/wigle.py @@ -126,11 +126,10 @@ def _extract_gps_data(path): with open(path, 'r') as json_file: return json.load(json_file) except OSError as os_err: - logging.error("WIGLE: %s", os_err) + raise os_err except json.JSONDecodeError as json_err: - logging.error("WIGLE: %s", json_err) + raise json_err - return None def _format_auth(data): out = "" @@ -203,16 +202,18 @@ def on_internet_available(display, config, log): if READY: handshake_dir = config['bettercap']['handshakes'] all_files = os.listdir(handshake_dir) - gps_files = [os.path.join(handshake_dir, filename) + all_gps_files = [os.path.join(handshake_dir, filename) for filename in all_files if filename.endswith('.gps.json')] - gps_new = set(gps_files) - set(ALREADY_UPLOADED) - set(SKIP) + new_gps_files = set(all_gps_files) - set(ALREADY_UPLOADED) - set(SKIP) - if gps_new: + if new_gps_files: logging.info("WIGLE: Internet connectivity detected. Uploading new handshakes to wigle.net") - lines = list() - for gps_file in gps_new: + csv_entries = list() + no_err_entries = list() + + for gps_file in new_gps_files: pcap_filename = gps_file.replace('.gps.json', '.pcap') if not os.path.exists(pcap_filename): @@ -220,7 +221,17 @@ def on_internet_available(display, config, log): SKIP.append(gps_file) continue - gps_data = _extract_gps_data(gps_file) + try: + gps_data = _extract_gps_data(gps_file) + except OSError as os_err: + logging.error("WIGLE: %s", os_err) + SKIP.append(gps_file) + continue + except json.JSONDecodeError as json_err: + logging.error("WIGLE: %s", json_err) + SKIP.append(gps_file) + continue + try: pcap_data = _analyze_pcap(pcap_filename) except Scapy_Exception as sc_e: @@ -228,34 +239,37 @@ def on_internet_available(display, config, log): SKIP.append(gps_file) continue + # encrypption-key is only there if privacy-cap was set if 'encryption' in pcap_data: if not pcap_data['encryption']: pcap_data['encryption'].add('WEP') else: + # no encryption, nothing to eat :( pcap_data['encryption'] = set() pcap_data['encryption'].add('OPN') if len(pcap_data) < 5: - # not enough data + # not enough data; try next time SKIP.append(gps_file) continue new_entry = _transform_wigle_entry(gps_data, pcap_data) - lines.append(new_entry) + csv_entries.append(new_entry) + no_err_entries.append(gps_file) - if lines: + if csv_entries: display.set('status', "Uploading gps-data to wigle.net ...") display.update(force=True) try: - _send_to_wigle(lines, OPTIONS['api_key']) - ALREADY_UPLOADED += gps_new + _send_to_wigle(csv_entries, OPTIONS['api_key']) + ALREADY_UPLOADED += no_err_entries with open('/root/.wigle_uploads', 'a') as up_file: - for gps in gps_new: + for gps in no_err_entries: up_file.write(gps + "\n") - logging.info("WIGLE: Successfuly uploaded %d files", len(gps_new)) + logging.info("WIGLE: Successfuly uploaded %d files", len(no_err_entries)) except requests.exceptions.RequestException as re_e: - SKIP += lines + SKIP += no_err_entries logging.error("WIGLE: Got an exception while uploading %s", re_e) except OSError as os_e: - SKIP += lines + SKIP += no_err_entries logging.error("WIGLE: Got the following error: %s", os_e)