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 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 of DNS servers. This script is meant for comparing response time of multiple
DNS servers at once: DNS servers at once:
``` ```% ./dnseval.py -f public-v4.txt -c3 ripe.net
% ./dnseval.py wikipedia.org server avg(ms) min(ms) max(ms) stddev(ms) lost(%) flags
server avg(ms) min(ms) max(ms) stddev(ms) lost(%) ----------------------------------------------------------------------------------
-------------------------------------------------------------------------- 8.8.8.8 210.225 109.864 407.420 170.785 %0 QR RD RA
4.2.2.1 151.067 131.270 221.742 28.643 %10 8.8.4.4 107.850 93.134 120.578 13.830 %0 QR RD RA
4.2.2.2 142.175 132.921 178.133 13.348 %0 ns.ripe.net 118.911 114.874 123.389 4.275 %0 QR AA RD
64.6.64.6 133.047 109.145 162.938 20.609 %0 4.2.2.1 104.380 102.449 106.588 2.083 %0 QR RD RA
64.6.65.6 377.270 97.669 661.471 172.717 %0 4.2.2.2 131.056 99.143 193.711 54.264 %0 QR RD RA
8.8.4.4 389.048 294.581 511.134 67.953 %0 4.2.2.3 98.956 97.463 100.310 1.429 %0 QR RD RA
8.8.8.8 0.000 0.000 0.000 0.000 %100 4.2.2.4 223.173 97.418 463.728 208.398 %0 QR RD RA
208.67.222.222 179.068 135.975 258.582 50.681 %0 4.2.2.5 104.290 97.264 117.878 11.770 %0 QR RD RA
208.67.220.220 137.817 135.822 140.113 1.504 %0
``` ```
### Author ### Author

View File

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