#!/usr/local/bin/python3.sh -u # -*-mode: python; py-indent-offset: 2; indent-tabs-mode: nil; coding: utf-8-unix -*- __doc__ = """ A script by adrelanos@riseup.net to check what percentage of boostrapping tor is at. """ ## Copyright (C) 2012 - 2020 ENCRYPTED SUPPORT LP ## See the file COPYING for copying conditions. import sys import os import re import logging import socket from stem.connection import connect from stem_examples.tor_controller import get_controller LOG = logging.getLogger() def iMain(lArgs=None): password = os.environ.get('TOR_CONTROLLER_PASSWORD', '') if os.path.exists('/run/tor/control'): controller = get_controller(password=password, unix='/run/tor/control') else: controller = get_controller(password=password, port=9051) ## Possible answer, if network cable has been removed: ## 250-status/bootstrap-phase=WARN BOOTSTRAP PROGRESS=80 TAG=conn_or SUMMARY="Connecting to the Tor network" WARNING="No route to host" REASON=NOROUTE COUNT=26 RECOMMENDATION=warn ## Possible answer: ## 250-status/bootstrap-phase=NOTICE BOOTSTRAP PROGRESS=85 TAG=handshake_or SUMMARY="Finishing handshake with first hop" ## Possible answer, when done: ## 250-status/bootstrap-phase=NOTICE BOOTSTRAP PROGRESS=100 TAG=done SUMMARY="Done" ## TODO: parse the messages above. try: bootstrap_status = controller.get_info("status/bootstrap-phase") LOG.info(format(bootstrap_status)) progress_percent = re.match('.* PROGRESS=([0-9]+).*', bootstrap_status) exit_code = int(progress_percent.group(1)) controller.close() except socket.error as e: # Error while receiving a control message (SocketClosed): received exception "read of closed file" return 0 except Exception as e: raise return 0 if __name__ == '__main__': from stem_examples.stem_utils import vsetup_logging if os.environ.get('DEBUG', ''): log_level = 10 else: log_level = 20 vsetup_logging(LOG, log_level) try: i = iMain([]) except KeyboardInterrupt as e: i = 0 except Exception as e: LOG.exception(f"Exception {e}") i = 1 sys.exit(i)