tor/scripts/maint/generateFallbackDirLine.py
teor e244738bbd
Add fallback directory mirror helper scripts
Add the generateFallbackDirLine.py script for automatically generating
fallback directory mirror lines from relay fingerprints. No more typos!

Add the lookupFallbackDirContact.py script for automatically looking up
operator contact info from relay fingerprints.

Implements ticket 24706.
2018-01-05 13:27:55 +11:00

42 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python
# Generate a fallback directory whitelist/blacklist line for every fingerprint
# passed as an argument.
#
# Usage:
# generateFallbackDirLine.py fingerprint ...
import sys
import stem.descriptor.remote as remote
if len(sys.argv) <= 1:
print "Usage: {} fingerprint ...".format(sys.argv[0])
sys.exit(-1)
# we need the full consensus, because it has IPv6 ORPorts
# and we want a fingerprint to router mapping in routers
#
# stem returns document_handler='DOCUMENT' as a list of consensuses
# with one entry
consensus = remote.get_consensus(document_handler='DOCUMENT').run()[0]
for fingerprint in sys.argv[1:]:
if fingerprint in consensus.routers:
r = consensus.routers[fingerprint]
# Tor clients don't use DirPorts, but old code requires one for fallbacks
if r.dir_port is not None:
# IPv4:DirPort orport=ORPort id=Fingerprint ipv6=[IPv6]:IPv6ORPort # nick
ipv6_or_ap_list = [ apv for apv in r.or_addresses if apv[2] ]
ipv6_str = ""
if len(ipv6_or_ap_list) > 0:
ipv6_or_ap = ipv6_or_ap_list[0]
ipv6_str = " ipv6=[{}]:{}".format(ipv6_or_ap[0], ipv6_or_ap[1])
print ("{}:{} orport={} id={}{} # {}"
.format(r.address, r.dir_port, r.or_port, r.fingerprint,
ipv6_str, r.nickname))
else:
print "# {} needs a DirPort".format(fingerprint)
else:
print "# {} not found in current consensus".format(fingerprint)