diff --git a/dnsping.py b/dnsping.py index 63959c3..ae5457f 100755 --- a/dnsping.py +++ b/dnsping.py @@ -25,15 +25,19 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import dns.rdatatype -import dns.resolver import getopt +import ipaddress import os +import re import signal +import socket import sys import time from statistics import stdev +import dns.rdatatype +import dns.resolver + __VERSION__ = 1.0 __PROGNAME__ = os.path.basename(sys.argv[0]) should_stop = False @@ -97,6 +101,7 @@ def main(): verbose = True elif o in ("-s", "--server"): dnsserver = a + elif o in ("-q", "--quiet"): quiet = True verbose = False @@ -107,6 +112,16 @@ def main(): else: 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.nameservers = [dnsserver] resolver.timeout = timeout @@ -127,7 +142,7 @@ def main(): etime = time.time() except dns.resolver.NoNameservers as e: if not quiet: - print("no response to dns request") + print("No response to dns request") if verbose: print("error:", e) exit(1) @@ -135,15 +150,15 @@ def main(): if not quiet: print("Hostname does not exist") if verbose: - print("error:", e) + print("Error:", e) exit(1) except dns.resolver.Timeout: if not quiet: - print("request timeout") + print("Request timeout") pass except dns.resolver.NoAnswer: if not quiet: - print("invalid answer") + print("No answer") pass else: elapsed = (etime - stime) * 1000 # convert to milliseconds