Exitmap is a fast and modular Python-based scanner for Tor exit relays. Exitmap modules implement tasks that are run over (a subset of) all exit relays. If you have a background in functional programming, think of exitmap as a map() interface for Tor exit relays: Modules can perform any TCP-based networking task like fetching a web page, uploading a file, connecting to an SSH server, or joining an IRC channel.
In practice, exitmap is useful to monitor the reliability and trustworthiness of exit relays. The Tor Project uses exitmap to check for false negatives on the Tor Project’s check service and to find malicious exit relays. It is easy to develop new modules for exitmap; just have a look at the file HACKING in the doc/ directory or check out one of the existing modules.
Exitmap uses Stem to create circuits to all given exit relays. Each time tor notifies exitmap of an established circuit, a module is invoked for the newly established circuit. Modules can be pure Python scripts or executables. For executables, torsocks is necessary.
Exitmap comes with batteries included, providing the following modules:
– testfds: Tests if an exit relay is able to fetch the content of a simple web page. If an exit relay is unable to do that, it might not have enough file descriptors available.
– checktest: Attempts to find false negatives in the Tor Project’s check service.
– dnspoison: Attempts to resolve several domains and compares the received DNS A records to the expected records.
– dnssec: Detects exit relays whose resolver does not validate DNSSEC.
– patchingCheck: Checks for file tampering.
– cloudflared: Checks if a web site returns a CloudFlare CAPTCHA.
– rtt: Measure round-trip times through an exit to various destinations.
+ Python 2.7.x
+ dnspython & stem Python library
git clone https://github.com/NullHypothesis/exitmap && cd exitmap
pip install -r requirements.txt
./bin/exitmap --build-delay 5 checktest