# -*-mode: doctest; tab-width: 0; py-indent-offset: 4; coding: utf-8-unix -*- == stem_examples tor testing == This is a Python doctest file that is executable documentation. Pass the controller password if needed as an environment variable: >>> import os >>> assert os.environ['TOR_CONTROLLER_PASSWORD'] Add our code to the PYTHONPATH >>> import sys >>> sys.path.append(os.path.join(os.getcwd(), 'src', 'stem_examples')) We'll need the settings defined in {{{/usr/local/etc/testforge/testforge.yml}}} >>> print("yaml", file=sys.stderr) >>> import yaml >>> sFacts = open('/usr/local/etc/testforge/testforge.yml').read() >>> assert sFacts >>> dFacts = yaml.safe_load(sFacts) FixMe: use the settings for the ports and directories below. >>> import os >>> os.environ['http_proxy'] = 'http://'+dFacts['HTTP_PROXYHOST']+':'+str(dFacts['HTTP_PROXYPORT']) >>> os.environ['https_proxy'] = 'http://'+dFacts['HTTPS_PROXYHOST']+':'+str(dFacts['HTTPS_PROXYPORT']) >>> os.environ['socks_proxy'] = 'socks5://'+dFacts['SOCKS_PROXYHOST']+':'+str(dFacts['SOCKS_PROXYPORT']) ### compare_flags Comparing Directory Authority Flags ### introduction_points Introduction Points >>> print("introduction_points", file=sys.stderr) >>> import introduction_points The introduction points are the ways of connecting to hidden services. We test 3 known hidden services: Facebook, DuckDuckGo and . >>> lKNOWN_ONIONS = [ ... 'facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd', # facebook ... 'duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad', # ddg ... 'zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad', # hks ... ] We wil expect to get back the hidden service version, the descriptor-lifetime and then the descriptor-signing-key-cert: >>> introduction_points.iMain(lKNOWN_ONIONS) #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE hs-descriptor 3 descriptor-lifetime ... ### exit_used Determine The Exit You're Using Lets say you're using Tor and one day you run into something odd. Maybe a misconfigured relay, or maybe one that's being malicious. How can you figure out what exit you're using? >>> print("exit_used", file=sys.stderr) >>> import exit_used ## relay_connections Connection Summary >>> print("relay_connections", file=sys.stderr) >>> import relay_connections The following provides a summary of your relay's inbound and outbound connections. You must be root or tor to run this: relay_connections.iMain(["--ctrlport", "9051"]) ## outdated_relays >>> print("outdated_relays", file=sys.stderr) >>> import outdated_relays >>> outdated_relays.iMain() #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE Checking for outdated relays ... ## tor_bootstrap_check >>> print("tor_bootstrap_check", file=sys.stderr) >>> import tor_bootstrap_check A script by adrelanos@riseup.net to check what percentage of boostrapping tor is at. This fails under doctest but not from the cmdline >> tor_bootstrap_check.iMain() #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE NOTICE ... control_port = stem.socket.ControlPort(address, port) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/stem/socket.py", line 503, in __init__ self.connect() File "/usr/local/lib/python3.11/site-packages/stem/socket.py", line 172, in connect self._socket = self._make_socket() ^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/stem/socket.py", line 538, in _make_socket raise stem.SocketError(exc) stem.SocketError: Socket error: 0x01: General SOCKS server failure