accept dns server by name (fixes #5)
This commit is contained in:
parent
c9537eb31f
commit
b91962ab72
27
dnsping.py
27
dnsping.py
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user