add flags in dnseval output and update docs (close #13)

This commit is contained in:
Babak Farrokhi 2016-05-14 13:22:02 +04:30
parent 895c80b5bf
commit 1d373df954
Signed by: farrokhi
GPG Key ID: 6B267AD85D632E9A
2 changed files with 20 additions and 18 deletions

View File

@ -106,18 +106,17 @@ Using `--expert` will instruct dnstraceroute to print expert hints (such as warn
dnseval is a bulk ping utility that sends an arbitrary DNS query to a give list
of DNS servers. This script is meant for comparing response time of multiple
DNS servers at once:
```
% ./dnseval.py wikipedia.org
server avg(ms) min(ms) max(ms) stddev(ms) lost(%)
--------------------------------------------------------------------------
4.2.2.1 151.067 131.270 221.742 28.643 %10
4.2.2.2 142.175 132.921 178.133 13.348 %0
64.6.64.6 133.047 109.145 162.938 20.609 %0
64.6.65.6 377.270 97.669 661.471 172.717 %0
8.8.4.4 389.048 294.581 511.134 67.953 %0
8.8.8.8 0.000 0.000 0.000 0.000 %100
208.67.222.222 179.068 135.975 258.582 50.681 %0
208.67.220.220 137.817 135.822 140.113 1.504 %0
```% ./dnseval.py -f public-v4.txt -c3 ripe.net
server avg(ms) min(ms) max(ms) stddev(ms) lost(%) flags
----------------------------------------------------------------------------------
8.8.8.8 210.225 109.864 407.420 170.785 %0 QR RD RA
8.8.4.4 107.850 93.134 120.578 13.830 %0 QR RD RA
ns.ripe.net 118.911 114.874 123.389 4.275 %0 QR AA RD
4.2.2.1 104.380 102.449 106.588 2.083 %0 QR RD RA
4.2.2.2 131.056 99.143 193.711 54.264 %0 QR RD RA
4.2.2.3 98.956 97.463 100.310 1.429 %0 QR RD RA
4.2.2.4 223.173 97.418 463.728 208.398 %0 QR RD RA
4.2.2.5 104.290 97.264 117.878 11.770 %0 QR RD RA
```
### Author

View File

@ -36,6 +36,7 @@ from statistics import stdev
import dns.rdatatype
import dns.resolver
import dns.flags
__VERSION__ = 1.0
__PROGNAME__ = os.path.basename(sys.argv[0])
@ -75,6 +76,7 @@ def dnsping(host, server, dnsrecord, timeout, count):
resolver.timeout = timeout
resolver.lifetime = timeout
resolver.retry_servfail = 0
flags = ""
response_time = []
i = 0
@ -93,6 +95,7 @@ def dnsping(host, server, dnsrecord, timeout, count):
else:
elapsed = (etime - stime) * 1000 # convert to milliseconds
response_time.append(elapsed)
flags = dns.flags.to_text(answers.response.flags)
r_sent = i + 1
r_received = len(response_time)
@ -112,7 +115,7 @@ def dnsping(host, server, dnsrecord, timeout, count):
r_avg = 0
r_stddev = 0
return (server, r_avg, r_min, r_max, r_stddev, r_lost_percent)
return (server, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags)
def main():
@ -172,8 +175,8 @@ def main():
f = [name.strip() for name in f]
width = maxlen(f)
blanks = (width - 5) * ' '
print('server ', blanks, ' avg(ms) min(ms) max(ms) stddev(ms) lost(%)')
print((60 + width) * '-')
print('server ', blanks, ' avg(ms) min(ms) max(ms) stddev(ms) lost(%) flags')
print((70 + width) * '-')
for server in f:
# check if we have a valid dns server address
try:
@ -189,12 +192,12 @@ def main():
if not s:
continue
(s, r_avg, r_min, r_max, r_stddev, r_lost_percent) = dnsping(hostname, s, dnsrecord, waittime,
(s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags) = dnsping(hostname, s, dnsrecord, waittime,
count)
s = server.ljust(width + 1)
print("%s %-8.3f %-8.3f %-8.3f %-8.3f %%%d" % (
s, r_avg, r_min, r_max, r_stddev, r_lost_percent), flush=True)
print("%s %-8.3f %-8.3f %-8.3f %-8.3f %%%d %13s" % (
s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags), flush=True)
except Exception as e:
print('error: %s' % e)