Add --tcp/-T option (fix #19)

This commit is contained in:
Babak Farrokhi 2016-06-14 18:31:58 +04:30
parent 1fa14ded48
commit 2fb6cdb300
Signed by: farrokhi
GPG Key ID: 6B267AD85D632E9A

View File

@ -53,6 +53,7 @@ usage: %s [-h] [-f server-list] [-c count] [-t type] [-w wait] hostname
-c --count number of requests to send (default: 10) -c --count number of requests to send (default: 10)
-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
""" % (__PROGNAME__, __VERSION__, __PROGNAME__)) """ % (__PROGNAME__, __VERSION__, __PROGNAME__))
sys.exit() sys.exit()
@ -114,7 +115,7 @@ def flags_to_text(flags):
return ' '.join(text_flags) return ' '.join(text_flags)
def dnsping(host, server, dnsrecord, timeout, count): def dnsping(host, server, dnsrecord, timeout, count, use_tcp=False):
resolver = dns.resolver.Resolver() resolver = dns.resolver.Resolver()
resolver.nameservers = [server] resolver.nameservers = [server]
resolver.timeout = timeout resolver.timeout = timeout
@ -132,7 +133,7 @@ def dnsping(host, server, dnsrecord, timeout, count):
break break
try: try:
stime = time.time() stime = time.time()
answers = resolver.query(host, dnsrecord) # todo: response validation in future answers = resolver.query(host, dnsrecord, tcp=use_tcp) # 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
@ -182,11 +183,12 @@ def main():
waittime = 5 waittime = 5
inputfilename = None inputfilename = None
fromfile = False fromfile = False
use_tcp = False
hostname = 'wikipedia.org' hostname = 'wikipedia.org'
try: try:
opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:", opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:T",
["help", "file=", "count=", "type=", "wait="]) ["help", "file=", "count=", "type=", "wait=", "tcp"])
except getopt.GetoptError as err: except getopt.GetoptError as err:
print(err) print(err)
usage() usage()
@ -208,6 +210,8 @@ def main():
waittime = int(a) waittime = int(a)
elif o in ("-t", "--type"): elif o in ("-t", "--type"):
dnsrecord = a dnsrecord = a
elif o in ("-T", "--tcp"):
use_tcp = True
else: else:
print("Invalid option: %s" % o) print("Invalid option: %s" % o)
usage() usage()
@ -247,7 +251,7 @@ 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) count, use_tcp=use_tcp)
s = server.ljust(width + 1) s = server.ljust(width + 1)
text_flags = flags_to_text(flags) text_flags = flags_to_text(flags)