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;
use JSON;
use Date::Parse;
use File::Copy;
+use DXUtil;
DXDebug::dbginit();
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 $!";
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
{
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;
}