X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fcreate_master_badip_files.pl;h=f7b25be48ca5dfe472416245a79f410ff52f2e63;hb=56b93915d65c299a5f2d2e555ee361c056773843;hp=0a9f5ba6e034b880c1d62a4c858fe4e735d9ded9;hpb=81404bc642ad4ebddcfbf69aec1da3a90be75f20;p=spider.git diff --git a/perl/create_master_badip_files.pl b/perl/create_master_badip_files.pl index 0a9f5ba6..f7b25be4 100755 --- a/perl/create_master_badip_files.pl +++ b/perl/create_master_badip_files.pl @@ -8,19 +8,21 @@ use 5.16.1; # search local then perl directories +use strict; + BEGIN { # root of directory tree for this system - $root = "/spider"; + our $root = "/spider"; $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'}; mkdir "$root/local_data", 02777 unless -d "$root/local_data"; unshift @INC, "$root/perl"; # this IS the right way round! unshift @INC, "$root/local"; - $data = "$root/data"; + our $data = "$root/data"; } -use strict; + use DXVars; use SysVar; @@ -31,6 +33,7 @@ use LWP::Simple; use JSON; use Date::Parse; use File::Copy; +use DXUtil; DXDebug::dbginit(); @@ -67,6 +70,7 @@ my $data = decode_json($content); my $now = time; my $ecount = 0; my $rcount = 0; +my $error = 0; my $rand = rand; open RELAY, ">$relayfn.$rand" or die "$0: cannot open $relayfn $!"; @@ -77,31 +81,43 @@ foreach my $e (@{$data->{relays}}) { my $seen = str2time($e->{last_seen}); next unless $seen >= $now - $last_seen_window; - my @or = clean_addr(@{$e->{or_addresses}}) if exists $e->{or_addresses}; my @exit = clean_addr(@{$e->{exit_addresses}}) if exists $e->{exit_addresses} ; + my @or = clean_addr(@{$e->{or_addresses}}) if exists $e->{or_addresses}; my $ors = join ', ', @or; my $es = join ', ', @exit; dbg "$0: $e->{nickname} $e->{last_seen} relays: [$ors] exits: [$es]" if $debug; - for (@or) { - print RELAY "$_\n"; - ++$rcount; - } for (@exit) { - print EXIT "$_\n"; - ++$ecount; + if (is_ipaddr($_)) { + print EXIT "$_\n"; + ++$ecount; + } else { + print STDERR "$_\n"; + ++$error; + } + } + for (@or) { + if (is_ipaddr($_)) { + print RELAY "$_\n"; + ++$rcount; + } else { + print STDERR "$_\n"; + ++$error; + } } } close RELAY; close EXIT; -dbg("$0: $rcount relays $ecount exits found"); +dbg("$0: $rcount relays $ecount exits $error error(s) found."); move "$relayfn.$rand", $relayfn if $rcount; move "$exitfn.$rand", $exitfn if $ecount; unlink "$relayfn.$rand"; unlink "$exitfn.$rand"; -exit 0; +exit $error; + +my %addr; sub clean_addr { @@ -109,11 +125,17 @@ sub clean_addr foreach (@_) { my ($ipv4) = /^((?:\d+\.){3}\d+)/; if ($ipv4) { + next if exists $addr{$ipv4}; push @out, $ipv4; + $addr{$ipv4}++; next; } my ($ipv6) = /^\[([:a-f\d]+)\]/; - push @out, $ipv6 if $ipv6; + if ($ipv6) { + next if exists $addr{$ipv6}; + push @out, $ipv6; + $addr{$ipv6}++; + } } return @out; }