Show TTL in dnseval output and update README (fix #23)
This commit is contained in:
parent
cc5dffc5d5
commit
93b0d6ec51
30
README.md
30
README.md
@ -100,21 +100,21 @@ 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 -t AAAA -f public-v4.txt -c10 fg.weberdns.de
|
||||
server avg(ms) min(ms) max(ms) stddev(ms) lost(%) flags
|
||||
------------------------------------------------------------------------------------------------
|
||||
8.8.8.8 94.556 90.488 112.209 6.322 %0 QR -- -- RD RA AD --
|
||||
8.8.4.4 92.599 90.265 94.338 1.086 %0 QR -- -- RD RA AD --
|
||||
ns.ripe.net 92.754 91.632 93.980 0.900 %0 QR -- -- RD RA AD --
|
||||
4.2.2.1 92.703 91.869 93.298 0.482 %0 QR -- -- RD RA AD --
|
||||
4.2.2.2 93.195 91.667 94.919 1.065 %0 QR -- -- RD RA AD --
|
||||
4.2.2.3 93.118 92.076 94.835 0.835 %0 QR -- -- RD RA AD --
|
||||
4.2.2.4 94.308 92.175 103.318 3.261 %0 QR -- -- RD RA AD --
|
||||
4.2.2.5 92.650 91.643 94.460 1.002 %0 QR -- -- RD RA AD --
|
||||
209.244.0.3 92.810 89.961 94.807 1.266 %0 QR -- -- RD RA AD --
|
||||
209.244.0.4 93.127 91.962 95.970 1.227 %0 QR -- -- RD RA AD --
|
||||
195.46.39.39 92.770 90.777 93.656 0.914 %0 QR -- -- RD RA AD --
|
||||
195.46.39.40 92.903 91.280 94.914 1.147 %0 QR -- -- RD RA AD --
|
||||
% ./dnseval.py -t AAAA -f public-v4.txt -c10 yahoo.com
|
||||
server avg(ms) min(ms) max(ms) stddev(ms) lost(%) ttl flags
|
||||
------------------------------------------------------------------------------------------------------
|
||||
8.8.8.8 270.791 215.599 307.498 40.630 %0 298 QR -- -- RD RA -- --
|
||||
8.8.4.4 222.955 171.753 307.251 60.481 %10 291 QR -- -- RD RA -- --
|
||||
ns.ripe.net 174.855 160.949 187.458 10.099 %0 289 QR -- -- RD RA -- --
|
||||
4.2.2.1 172.798 163.892 189.918 7.823 %0 287 QR -- -- RD RA -- --
|
||||
4.2.2.2 178.594 169.158 184.696 5.067 %0 285 QR -- -- RD RA -- --
|
||||
4.2.2.3 153.574 138.509 173.439 12.015 %0 284 QR -- -- RD RA -- --
|
||||
4.2.2.4 153.182 141.023 162.323 6.700 %0 282 QR -- -- RD RA -- --
|
||||
4.2.2.5 154.840 141.557 163.889 7.195 %0 281 QR -- -- RD RA -- --
|
||||
209.244.0.3 156.270 147.320 161.365 3.958 %0 279 QR -- -- RD RA -- --
|
||||
209.244.0.4 159.329 151.283 163.726 3.958 %0 278 QR -- -- RD RA -- --
|
||||
195.46.39.39 171.098 163.612 181.147 5.067 %0 276 QR -- -- RD RA -- --
|
||||
195.46.39.40 175.335 160.920 185.618 8.726 %0 274 QR -- -- RD RA -- --
|
||||
```
|
||||
|
||||
### Author
|
||||
|
96
dnseval.py
96
dnseval.py
@ -123,6 +123,7 @@ def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False, use_edns=Fal
|
||||
resolver.lifetime = timeout
|
||||
resolver.retry_servfail = 0
|
||||
flags = 0
|
||||
ttl = None
|
||||
answers = None
|
||||
if use_edns:
|
||||
resolver.use_edns(edns=0, payload=8192, ednsflags=dns.flags.edns_from_text('DO'))
|
||||
@ -166,8 +167,9 @@ def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False, use_edns=Fal
|
||||
|
||||
if answers is not None:
|
||||
flags = answers.response.flags
|
||||
ttl = answers.rrset.ttl
|
||||
|
||||
return server, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags
|
||||
return server, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags, ttl
|
||||
|
||||
|
||||
def main():
|
||||
@ -223,58 +225,58 @@ def main():
|
||||
usage()
|
||||
|
||||
try:
|
||||
if fromfile:
|
||||
with open(inputfilename, 'rt') as flist:
|
||||
f = flist.read().splitlines()
|
||||
else:
|
||||
f = resolvers
|
||||
if len(f) == 0:
|
||||
print("No nameserver specified")
|
||||
if fromfile:
|
||||
with open(inputfilename, 'rt') as flist:
|
||||
f = flist.read().splitlines()
|
||||
else:
|
||||
f = resolvers
|
||||
if len(f) == 0:
|
||||
print("No nameserver specified")
|
||||
|
||||
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(%) flags')
|
||||
print((84 + width) * '-')
|
||||
for server in f:
|
||||
# check if we have a valid dns server address
|
||||
if server.lstrip() == '': # deal with empty lines
|
||||
continue
|
||||
server = server.replace(' ', '')
|
||||
try:
|
||||
ipaddress.ip_address(server)
|
||||
except ValueError: # so it is not a valid IPv4 or IPv6 address, so try to resolve host name
|
||||
try:
|
||||
s = socket.getaddrinfo(server, port=None)[1][4][0]
|
||||
except OSError:
|
||||
print('Error: cannot resolve hostname:', server)
|
||||
s = None
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
s = server
|
||||
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(%) ttl flags')
|
||||
print((90 + width) * '-')
|
||||
for server in f:
|
||||
# check if we have a valid dns server address
|
||||
if server.lstrip() == '': # deal with empty lines
|
||||
continue
|
||||
server = server.replace(' ', '')
|
||||
try:
|
||||
ipaddress.ip_address(server)
|
||||
except ValueError: # so it is not a valid IPv4 or IPv6 address, so try to resolve host name
|
||||
try:
|
||||
s = socket.getaddrinfo(server, port=None)[1][4][0]
|
||||
except OSError:
|
||||
print('Error: cannot resolve hostname:', server)
|
||||
s = None
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
s = server
|
||||
|
||||
if not s:
|
||||
continue
|
||||
if not s:
|
||||
continue
|
||||
|
||||
try:
|
||||
(s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags) = dnsping(hostname, s, dnsrecord, waittime,
|
||||
count, use_tcp=use_tcp,
|
||||
use_edns=use_edns)
|
||||
except dns.resolver.NXDOMAIN:
|
||||
print('%s: NXDOMAIN' % (server))
|
||||
continue
|
||||
except Exception as e:
|
||||
print('%s: %s' % (server, e))
|
||||
continue
|
||||
try:
|
||||
(s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags, ttl) = dnsping(hostname, s, dnsrecord, waittime,
|
||||
count, use_tcp=use_tcp,
|
||||
use_edns=use_edns)
|
||||
except dns.resolver.NXDOMAIN:
|
||||
print('%s: NXDOMAIN' % (server))
|
||||
continue
|
||||
except Exception as e:
|
||||
print('%s: %s' % (server, e))
|
||||
continue
|
||||
|
||||
s = server.ljust(width + 1)
|
||||
text_flags = flags_to_text(flags)
|
||||
print("%s %-8.3f %-8.3f %-8.3f %-8.3f %%%-3d %25s" % (
|
||||
s, r_avg, r_min, r_max, r_stddev, r_lost_percent, text_flags), flush=True)
|
||||
s = server.ljust(width + 1)
|
||||
text_flags = flags_to_text(flags)
|
||||
print("%s %-8.3f %-8.3f %-8.3f %-8.3f %%%-3d %-5.0f %21s" % (
|
||||
s, r_avg, r_min, r_max, r_stddev, r_lost_percent, ttl, text_flags), flush=True)
|
||||
|
||||
except Exception as e:
|
||||
print('%s: %s' % (server, e))
|
||||
print('%s' % (server, e))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user