[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: How to remove some useless nodes
On Jan 27, 2008 11:08 AM, Kraktus <kraktus@xxxxxxxxxxxxxx> wrote:
> You can add
> ExcludeNodes NodeName1, NodeName2
> to your torrc, where the NodeName1, etc. are the names of Chinese exit
> nodes that you are aware of. However, you much disallow each Chinese
> node separately; you can't exclude by country.
>
A crude approach would be to write a script that checks
[vidalia-config-directory]\geoip-cache for IP addresses located in
China, and then extract fingerprints of the Tor nodes on those IPs
from [tor-config-directory]\cached-descriptors to build up your
"ExcludeNodes" list.
The enclosed perl script does just this. It should be self-explanatory
enough. It produces one "ExcludeNodes" line to be included in your
torrc file.
Instead of the geoip-cache file, you can also use country IP blocks
from www.ipdeny.com to match IP to country.
Yet another alternative using public tor status pages was discussed on
this list:
<http://archives.seul.org/or/talk/Jul-2006/msg00079.html>
Cheers,
John
#!/usr/bin/perl
# Usage
if (@ARGV != 3) {
print "Usage: $ENV{'_'} [2-letter-country-code] [descriptors-file] [geoip-file] \n";
exit(1);
}
$ARGV[0] = uc($ARGV[0]);
# Build ip-to-country hash table from geoip cache
open(GEOIP,$ARGV[2]);
while (<GEOIP>) {
($ip,undef,undef,$country,undef) = split(/,/);
$geoip{$ip} = $country;
}
# Parse descriptor file and extract fingerprints
open(DESC,$ARGV[1]);
$switch = false;
while (<DESC>) {
chomp;
@params = split(/ /);
if ($params[0] eq 'router') {
$switch = $geoip{$params[2]} eq $ARGV[0];
} elsif ($switch && $params[0] eq 'opt' && $params[1] eq 'fingerprint') {
push(@exclude,'$' . join('',@params[2 .. $#params]));
}
}
print 'ExcludeNodes ',join(',',@exclude),"\n";