Thread Schnellster öffentlicher Nameserver meines Standortes
(20 answers)
Opened by mixxer at 2017-05-17 01:16 Code (perl): (dl
)
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 ); Code (perl): (dl
)
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; Darf man bei euch so lange Listings posten oder nur Schnipsel? Ansonsten: Sehr wahrscheinlich kann ich die drei Serverlisten auch in perl direkt runterladen und zusammenfügen - bloß wie bzw. mit welchem Modul am einfachsten? Optimalerweise sollte am Ende nur ein mehrzeiliger Text in einer Variable stehen... Mit der zweiten nsquick.pl bin ich wirklich unzufrieden: Wahrscheinlich hohe Systemlast, lange Ladezeiten, Ressourcenverschwendung. Bei Abarbeitung der kompletten Liste schon mal bis zu 10+ parallele Prozesse bei ps ax... Irgendwie würde ich schon sowas wie forks und threads tun wollen, aber wie soll ich die ganzen Ergebnisse bündeln ohne Datei??? Und so richtig einleuchten tut mir fork nicht und threads schon gar nicht. Welches von beiden wird der Sache eher gerecht? Wenn ich das wüsste, dann muss ich mich nicht gleich von zwei Theorien auf einmal erschlagen lassen. Ich denke für meinen Fall wäre es wichtig die einzelnen Prozesse getaktet zu starten, damit die Last sich statistisch verteilt - nun bin kein Mathematiker, aber ich mags wenn etwas gleichmäßig dahinplätschert anstatt immer Vollgas-Bremse-Vollgas... genug!!! Freue mich auf Antworten. mixxer |