Using EDNS0 is now optional and disabled by default

Also update documentation with new example
This commit is contained in:
Babak Farrokhi 2016-06-26 16:42:19 +04:30
parent 8535bb2aba
commit 40052f008d
Signed by: farrokhi
GPG Key ID: 6B267AD85D632E9A
3 changed files with 29 additions and 17 deletions

View File

@ -107,17 +107,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 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 -e -t AAAA -f public-v4.txt -c10 fg.weberdns.de
server avg(ms) min(ms) max(ms) stddev(ms) lost(%) flags 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.8.8 94.556 90.488 112.209 6.322 %0 QR -- -- RD RA AD --
8.8.4.4 107.850 93.134 120.578 13.830 %0 QR RD RA 8.8.4.4 92.599 90.265 94.338 1.086 %0 QR -- -- RD RA AD --
ns.ripe.net 118.911 114.874 123.389 4.275 %0 QR AA RD ns.ripe.net 92.754 91.632 93.980 0.900 %0 QR -- -- RD RA AD --
4.2.2.1 104.380 102.449 106.588 2.083 %0 QR RD RA 4.2.2.1 92.703 91.869 93.298 0.482 %0 QR -- -- RD RA AD --
4.2.2.2 131.056 99.143 193.711 54.264 %0 QR RD RA 4.2.2.2 93.195 91.667 94.919 1.065 %0 QR -- -- RD RA AD --
4.2.2.3 98.956 97.463 100.310 1.429 %0 QR RD RA 4.2.2.3 93.118 92.076 94.835 0.835 %0 QR -- -- RD RA AD --
4.2.2.4 223.173 97.418 463.728 208.398 %0 QR RD RA 4.2.2.4 94.308 92.175 103.318 3.261 %0 QR -- -- RD RA AD --
4.2.2.5 104.290 97.264 117.878 11.770 %0 QR RD RA 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 --
``` ```
### Author ### Author

View File

@ -54,6 +54,7 @@ usage: %s [-h] [-f server-list] [-c count] [-t type] [-w wait] hostname
-w --wait maximum wait time for a reply (default: 5) -w --wait maximum wait time for a reply (default: 5)
-t --type DNS request record type (default: A) -t --type DNS request record type (default: A)
-T --tcp Use TCP instead of UDP -T --tcp Use TCP instead of UDP
-e --edns Use EDNS0
""" % (__PROGNAME__, __VERSION__, __PROGNAME__)) """ % (__PROGNAME__, __VERSION__, __PROGNAME__))
sys.exit() sys.exit()
@ -115,7 +116,7 @@ def flags_to_text(flags):
return ' '.join(text_flags) return ' '.join(text_flags)
def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False): def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False, use_edns=False):
resolver = dns.resolver.Resolver() resolver = dns.resolver.Resolver()
resolver.nameservers = [server] resolver.nameservers = [server]
resolver.timeout = timeout resolver.timeout = timeout
@ -123,7 +124,8 @@ def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False):
resolver.retry_servfail = 0 resolver.retry_servfail = 0
flags = 0 flags = 0
answers = None answers = None
resolver.use_edns(edns=0, payload=4096, ednsflags=dns.flags.edns_from_text('DO')) if use_edns:
resolver.use_edns(edns=0, payload=8192, ednsflags=dns.flags.edns_from_text('DO'))
response_times = [] response_times = []
i = 0 i = 0
@ -133,7 +135,8 @@ def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False):
break break
try: try:
stime = time.time() stime = time.time()
answers = resolver.query(host, dnsrecord, tcp=use_tcp, raise_on_no_answer=False) # todo: response validation in future answers = resolver.query(host, dnsrecord, tcp=use_tcp,
raise_on_no_answer=False) # todo: response validation in future
etime = time.time() etime = time.time()
except (dns.resolver.NoNameservers, dns.resolver.NoAnswer): except (dns.resolver.NoNameservers, dns.resolver.NoAnswer):
break break
@ -184,11 +187,12 @@ def main():
inputfilename = None inputfilename = None
fromfile = False fromfile = False
use_tcp = False use_tcp = False
use_edns = False
hostname = 'wikipedia.org' hostname = 'wikipedia.org'
try: try:
opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:T", opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:Te",
["help", "file=", "count=", "type=", "wait=", "tcp"]) ["help", "file=", "count=", "type=", "wait=", "tcp", "edns"])
except getopt.GetoptError as err: except getopt.GetoptError as err:
print(err) print(err)
usage() usage()
@ -212,6 +216,8 @@ def main():
dnsrecord = a dnsrecord = a
elif o in ("-T", "--tcp"): elif o in ("-T", "--tcp"):
use_tcp = True use_tcp = True
elif o in ("-e", "--edns"):
use_edns = True
else: else:
print("Invalid option: %s" % o) print("Invalid option: %s" % o)
usage() usage()
@ -251,7 +257,8 @@ def main():
if not s: if not s:
continue continue
(s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags) = dnsping(hostname, s, dnsrecord, waittime, (s, r_avg, r_min, r_max, r_stddev, r_lost_percent, flags) = dnsping(hostname, s, dnsrecord, waittime,
count, use_tcp=use_tcp) count, use_tcp=use_tcp,
use_edns=use_edns)
s = server.ljust(width + 1) s = server.ljust(width + 1)
text_flags = flags_to_text(flags) text_flags = flags_to_text(flags)

View File

@ -0,0 +1 @@
dnspython==1.15.0