# -*-mode: doctest; tab-width: 0; py-indent-offset: 4; coding: utf-8-unix -*- == exclude_badExits testing == This is a Python doctest file that is executable documentation. exclude_badExits extends nusenu's basic idea of using the stem library to dynamically exclude nodes that are likely to be bad by putting them on the ExcludeNodes or ExcludeExitNodes setting of a running Tor. * https://github.com/nusenu/noContactInfo_Exit_Excluder * https://github.com/TheSmashy/TorExitRelayExclude The basic idea is to exclude Exit nodes that do not have ContactInfo: * https://github.com/nusenu/ContactInfo-Information-Sharing-Specification That can be extended to relays that do not have an email in the contact, or to relays that do not have ContactInfo that is verified to include them. You can see the status of tor relays at https://torstatus.rueckgr.at/ The code for that site is at https://github.com/paulchen/torstatus You can get a list of exit relays that are marked bad with: wget --post-data='SR=FBadExit&SO=Asc&FBadExit=1' 'https://torstatus.rueckgr.at/' It is assumed that you are running a tor that has its torrc configured with: ControlPort 127.0.0.1:9051 and/or ControlSocket /run/tor/control ControlSocketsGroupWritable 1 and HashedControlPassword 16:B4155E403F37446360B30D0481C3BB03C083F0E3BB689883A3838E4692 so that you have some security on the Control connection. Pass the controller password to these scripts 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', 'exclude_badExits')) 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']) Load the module: >>> print("exclude_badExits", file=sys.stderr) >>> from exclude_badExits import exclude_badExits >>> lArgs = ['--help'] Read the usage: >>> exclude_badExits.iMain(lArgs) usage: ... Torrc to check for suggestions: >>> lArgs = ['--torrc', '/etc/tor/torrc-defaults'] >>> exclude_badExits.iMain(lArgs) INFO ... This may take a while: >>> lArgs = ['--proxy_ctl', '9051'] >>> exclude_badExits.iMain(lArgs) There is a doctest test document in exclude_badExits.txt