Skip to content

Instantly share code, notes, and snippets.

@avar
Created August 13, 2010 18:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save avar/523328 to your computer and use it in GitHub Desktop.
Save avar/523328 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
# Check if a Tor exit can exit to a given IP/port with TorDNSEL
# Usage, e.g.:
# for exit in $(wget -q -O- "https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=$(myip)" | grep -v ^#); do echo $exit; done | perl /tmp/gist-523328/tor-exit-to-ip-port.pl 173.194.37.104 80
use strict;
use warnings;
chomp(my @tor_exits = <STDIN>);
my $exits = @tor_exits;
my $to_ip = $ARGV[0];
my $to_ip_rev = rev_ip($to_ip);
my $to_port = $ARGV[1];
for (my $i = 0; $i < @tor_exits; $i++) {
my $rev_exit = rev_ip($tor_exits[$i]);
my $cmd = qq[dig +short $rev_exit.$to_port.$to_ip_rev.ip-port.exitlist.torproject.org];
chomp(my $out = qx[$cmd]);
if ($out ne '127.0.0.2') {
printf "%04d/%04d: %s can't be used to exit to %s:%d (%s)\n",
$i, scalar(@tor_exits), $tor_exits[$i], $to_ip, $to_port, $cmd;
}
}
sub rev_ip {
my $ip = shift;
my $rev = join '.', reverse split /\./, $ip;
return $rev;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment