1

Initial commit.

This commit is contained in:
eleksir
2016-09-03 22:38:52 +03:00
commit 82b0cfbcc2
22 changed files with 3182 additions and 0 deletions

89
dns-tank-st.pl Executable file
View File

@@ -0,0 +1,89 @@
#!/usr/bin/env perl
use strict;
use warnings "all";
use Net::DNS;
my $max_sleep = 2000; # max sleep between sequental lookups 2 seconds long
my $max_burst_lookups = 15; # max amount of lookup without delay
my $domfile = 'domfile.txt'; # file format: domainname record_type number_of_values
# num_of_values can be -1 if no A record exist
sub lookup; # hotpath :)
sub nodomlist;
sub usleep; # millisecond sleep, 1000 milliseconds = 1 second
nodomlist() unless ( -f $domfile );
my @list;
open (LIST, $domfile) or die ("Unable to read $domfile");
while (<LIST>){
next if (($_ eq '') or ($_ =~ /^\s*#/));
chomp($_); chomp($_);
push @list, $_;
}
close LIST;
my $res = Net::DNS::Resolver->new(
nameservers => [ '192.168.88.2' ],
recurse => 1,
debug => 0
);
my $lookup_cnt = int(rand($max_burst_lookups));
while ( 1 ) {
my $ok = 0; my $error = 0;
for (my $i = 0; $i < 10000; $i++) {
if ($lookup_cnt <= 0){
usleep(int(rand($max_sleep)));
$lookup_cnt = int(rand($max_burst_lookups));
} else {
$lookup_cnt--;
}
my ($domain, $record_type, $amount) = split(/\s+/, $list[int(rand(@list))]);
my $result = lookup($domain, $record_type);
if (defined($result) and ($result == $amount)){ $ok++; }
elsif (($amount == -1) and ($result == undef)){ $ok++; }
else { $error++; }
}
print "Success/Error: $ok/$error\n";
}
exit 0;
sub lookup {
my $host = shift;
my $type = shift;
my $rec_count = 0;
my $reply = $res->query($host, $type);
if (defined($reply)) {
foreach my $rr ($reply->answer) {
$rec_count++ if ($rr->type eq $type);
}
return $rec_count;
} else {
# warn "query failed: ", $res->errorstring, "\n";
return undef;
}
}
sub nodomlist {
print "Unable to find $domfile\n";
exit 1;
}
sub usleep {
my $delay = shift;
select(undef, undef, undef, $delay/1000);
return;
}