#!/usr/bin/perl use strict; use warnings; use feature 'say'; use LWP::Simple; use Data::Dump qw /dump/; my $tmp_file = './tmp.txt'; my $quick_test_file = './quick.txt'; my $test_clock = 0.15; my ( $list, $hash, $ax, $bx, $i, $j ); sub delay { # Programmablauf unterbrechen # IN: -1---> Zeit in Sekunden (float) select( undef, undef, undef, shift ); } sub mydig { # parst die für nshunter.pl nötigen Werte # der Ausgabe von dig in ein besser zu parsendes Format # # IN: # -1---> IP-Adresse des DNS-Servers # -2---> Query # -3---> Timeout # -4---> Anzahl Versuche # # OUT: # Zeichenkette: 'DNS-IP;;STATUS;;ANTWORTZEIT[in ms]' my ( $dns, $query, $timeout, $tries ) = @_; my $status = 'ERROR'; my $qtime = '---'; my $in = qx[dig \@$dns $query +time=$timeout +tries=$tries]; my @list = split( /\n/, $in ); for ( @list ) { $status = 'NOCONN' if $_ =~ /;; connection timed out;/; $status = $1 if $_ =~ /.*status: (.*), .*/; $qtime = $1 if $_ =~ /^;; Query time: (.*) msec.*/; } return "$dns;;$status;;$qtime"; } say "DNS-SERVERLISTE AKTUALISIEREN..."; for ( qw[ de ch at ] ) { $ax = 'http://www.ungefiltert-surfen.de/nameserver/'.$_.'.txt'; $bx = get $ax; die "Konnte $ax nicht laden!" unless defined $bx; push @$list, split( /\n/, $bx.qq[\n] ); } # IPv4! @$list = grep( /.*\..*/, @$list ); # doppelte IP's kicken %$hash = map { $_, [] } @$list; @$list = keys( %$hash ); ####### # QUICKTEST FOR ALL SERVERS ########################### $i = $#$list + 1; $j = 1; my @erg; my $ptr = \@erg; say "QUICKTEST BEI $i DNS-SERVERN DURCHFÜHREN..."; for ( 1 .. 10 ) { my $pid = fork; if ( not $pid ) { my $_temp; push @$_temp, mydig( $$list[$_-1], 'www.google.com', 4, 1 ); push @$_temp, mydig( $$list[$_-1], 'www.google.com', 4, 1 ); push @$ptr, @$_temp; say $_ for @$_temp; exit; } say "Call Server $_"; delay 0.25; } for ( 1 .. 10 ) { wait(); } say dump @erg;