accept dns server by name (fixes #5)

This commit is contained in:
Babak Farrokhi 2016-04-10 16:43:09 +04:30
parent c9537eb31f
commit b91962ab72
Signed by: farrokhi
GPG Key ID: 6B267AD85D632E9A

View File

@ -25,15 +25,19 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import dns.rdatatype
import dns.resolver
import getopt import getopt
import ipaddress
import os import os
import re
import signal import signal
import socket
import sys import sys
import time import time
from statistics import stdev from statistics import stdev
import dns.rdatatype
import dns.resolver
__VERSION__ = 1.0 __VERSION__ = 1.0
__PROGNAME__ = os.path.basename(sys.argv[0]) __PROGNAME__ = os.path.basename(sys.argv[0])
should_stop = False should_stop = False
@ -97,6 +101,7 @@ def main():
verbose = True verbose = True
elif o in ("-s", "--server"): elif o in ("-s", "--server"):
dnsserver = a dnsserver = a
elif o in ("-q", "--quiet"): elif o in ("-q", "--quiet"):
quiet = True quiet = True
verbose = False verbose = False
@ -107,6 +112,16 @@ def main():
else: else:
usage() usage()
# check if we have a valid dns server address
try:
ipaddress.ip_address(dnsserver)
except ValueError: # so it is not a valid IPv4 or IPv6 address, so try to resolve host name
try:
dnsserver = socket.getaddrinfo(dnsserver, port = None)[1][4][0]
except OSError:
print('Error: cannot resolve hostname:', dnsserver)
exit(1)
resolver = dns.resolver.Resolver() resolver = dns.resolver.Resolver()
resolver.nameservers = [dnsserver] resolver.nameservers = [dnsserver]
resolver.timeout = timeout resolver.timeout = timeout
@ -127,7 +142,7 @@ def main():
etime = time.time() etime = time.time()
except dns.resolver.NoNameservers as e: except dns.resolver.NoNameservers as e:
if not quiet: if not quiet:
print("no response to dns request") print("No response to dns request")
if verbose: if verbose:
print("error:", e) print("error:", e)
exit(1) exit(1)
@ -135,15 +150,15 @@ def main():
if not quiet: if not quiet:
print("Hostname does not exist") print("Hostname does not exist")
if verbose: if verbose:
print("error:", e) print("Error:", e)
exit(1) exit(1)
except dns.resolver.Timeout: except dns.resolver.Timeout:
if not quiet: if not quiet:
print("request timeout") print("Request timeout")
pass pass
except dns.resolver.NoAnswer: except dns.resolver.NoAnswer:
if not quiet: if not quiet:
print("invalid answer") print("No answer")
pass pass
else: else:
elapsed = (etime - stime) * 1000 # convert to milliseconds elapsed = (etime - stime) * 1000 # convert to milliseconds