1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#!/usr/bin/perl # # nshunter.pl # # Suche den schnellsten DNS-Server vor Ort # use strict; use warnings; my $tmp_file = './tmp.txt'; my $dns_list_file = './dns.txt'; my $quick_test_file = './quick.txt'; my $test_clock = 0.15; my ( $handle, $list, $hash, $ax, $i, $j ); sub delay { select( undef, undef, undef, shift ); } print "\nDNS-SERVERLISTE ONLINE AKTUALISIEREN...\n"; system( qq[wget -nv https://www.ungefiltert-surfen.de/nameserver/ch.txt -O $tmp_file] ); system( qq[cat $tmp_file > $dns_list_file] ); system( qq[echo >> $dns_list_file] ); system( qq[wget -nv https://www.ungefiltert-surfen.de/nameserver/de.txt -O $tmp_file] ); system( qq[cat $tmp_file >> $dns_list_file] ); system( qq[echo >> $dns_list_file] ); system( qq[wget -nv https://www.ungefiltert-surfen.de/nameserver/at.txt -O $tmp_file] ); system( qq[cat $tmp_file >> $dns_list_file] ); system( qq[echo >> $dns_list_file] ); system( qq[rm -f $tmp_file] ); open ( $ax, "<", $dns_list_file ); @$list = <$ax>; close ( $ax ); chomp ( @$list ); # IPv6 kicken @$list = grep( /.*\..*/, @$list ); # doppelte IP's kicken %$hash = map { $_, [] } @$list; @$list = keys( %$hash ); ####### # QUICKTEST FOR ALL SERVERS ########################### $i = $#$list + 1; $j = 1; print "QUICKTEST BEI $i DNS-SERVERN DURCHFÜHREN...\n"; system ( qq[rm -f $quick_test_file] ); for ( @$list ){ print "Teste DNS-Server $j von $i: $_\n"; system( qq[./nsquick.pl $_ www.google.com >> $quick_test_file &] ); $j++; last if $j>30; # test delay( $test_clock ); } do { delay( $test_clock * 2 ); my $ax = qx[ps ax | grep nsquick.pl | grep -v grep]; $list = [ split( /\n/, $ax ) ]; $i = $#$list + 1; print "Warte auf $i DNS-Server...\n"; } while ( $i );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/perl # # nsquick.pl: # # DNS-Server-Schnelltest # use strict; use warnings; use Data::Dump qw /dump/; my $dns = shift @ARGV; my $dom = shift @ARGV; my $out; sub dig { my $dns = shift; my $query = shift; my $timeout = shift; my $tries = shift; 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"; } push @$out, dig( $dns, $dom, 4, 1 ); push @$out, dig( $dns, $dom, 4, 1 ); print "$_\n" for @answers;
2017-05-19T22:13:23 mixxerDoch.leider geht mit LWP::Simple kein https
QuoteIch kann nicht raten was bei dir nicht klappte.See /root/.cpanm/work/1495312130.29635/build.log for details
2017-05-21T08:16:50 GwenDragonQuoteIch kann nicht raten was bei dir nicht klappte.See /root/.cpanm/work/1495312130.29635/build.log for details
2017-05-21T08:16:50 GwenDragonIch benutze cpan anstatt cpanm weil ich dann wenigsten sehe was nicht passt beim Installieren oder testen,
und setzte auch noch in cpan mit o conf halt_on_failure 0 dass cpan weitermacht so lange es geht und nicht bei ersten Problem stoppst.
1
2
3
4
5
6
7
8
9
10
11
say "DNS-SERVERLISTE AKTUALISIEREN...";
for ( qw[ de ch at ] ) {
$ax = 'https://www.ungefiltert-surfen.de/nameserver/'.$_.'.txt';
$bx = get $ax;
die "Konnte $ax nicht laden!" unless defined $bx;
push @$list, split( /\n/, $bx."\n" );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
pi@raspberrypi:~/ap/dns $ sudo ./nshunter.pl
DNS-SERVERLISTE AKTUALISIEREN...
QUICKTEST BEI 1642 DNS-SERVERN DURCHFÜHREN...
Call Server 1
194.231.98.149;;NOERROR;;29
194.231.98.149;;NOERROR;;13
Call Server 2
62.167.21.161;;NOERROR;;68
62.167.21.161;;NOERROR;;39
Call Server 3
77.59.232.36;;NOERROR;;64
77.59.232.36;;NOERROR;;43
Call Server 4
217.117.111.1;;NOERROR;;23
217.117.111.1;;NOERROR;;14
Call Server 5
212.41.204.89;;NOERROR;;41
212.41.204.89;;NOERROR;;27
Call Server 6
195.141.114.171;;NOERROR;;11
195.141.114.171;;NOERROR;;11
Call Server 7
213.221.216.238;;NOERROR;;78
213.221.216.238;;NOERROR;;60
Call Server 8
82.149.95.65;;NOERROR;;41
82.149.95.65;;NOERROR;;22
Call Server 9
62.202.17.66;;NOERROR;;63
62.202.17.66;;NOERROR;;36
Call Server 10
212.77.167.138;;NOERROR;;22
212.77.167.138;;NOERROR;;16
()
pi@raspberrypi:~/ap/dns $
2017-05-17T08:36:35 GwenDragonIdee:
Net::Ping nehmen, ping auf UDP und TCP 53 bei hires-Auflösung und timout auf 1, Ergebnis in eine named-Pipe schreiben.
Alle Prozesse forken oder threaden.
Bitte fragen wie sowas geht, dein Programm hier posten, wenn du nicht weiter kommst; ich kenne deine Programmierkenntnisse und Literatur, die du für Perl zur Verfügung hast, nicht.
2017-05-21T08:53:59 GwenDragonDu musst die Daten doch irgendwo speichern da beim forken die Prozesse asynchron ablaufen.
Das geht in eine externe Datei oder als Idee: ein Tied Hash.