Thread Schnellster öffentlicher Nameserver meines Standortes (20 answers)
Opened by mixxer at 2017-05-17 01:16

mixxer
 2017-05-18 22:30
#186546 #186546
User since
2016-04-01
25 Artikel
BenutzerIn
[default_avatar]
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

View full thread Schnellster öffentlicher Nameserver meines Standortes