88 lines
2.8 KiB
Text
88 lines
2.8 KiB
Text
# -*-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: ...
|
|
<BLANKLINE>
|
|
|
|
Torrc to check for suggestions:
|
|
>>> lArgs = ['--torrc', '/etc/tor/torrc-defaults']
|
|
>>> exclude_badExits.iMain(lArgs)
|
|
INFO ...
|
|
<BLANKLINE>
|
|
|
|
This may take a while:
|
|
|
|
>>> lArgs = ['--proxy_ctl', '9051']
|
|
>>> exclude_badExits.iMain(lArgs)
|
|
|
|
There is a doctest test document in exclude_badExits.txt
|
|
|