-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdnslookup.py
executable file
·82 lines (74 loc) · 2.5 KB
/
dnslookup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!venv/bin/python
#
# Dependencies: dnspython (http://www.dnspython.org/)
#
# DNS Lookup Check
#
# Usage: ./dnslookup.py <qname> <rdtype> <expans> <nameserver>
# <qname> - Query Name (A/CNAME: FQDN, NS/MX: Domain Name, PTR: IP Address)
# <rdtype> - Query Type (A, MX, NS, CNAME, PTR)
# <expans> - Expected Answer (A/CNAME: IP Address, PTR/CNAME/MX/NS: FQDN)
# <nameserver> - IP Address of Nameserver to perform lookup against
#
# Author: Adam Smith
import dns.resolver, dns.reversename, sys
if (len(sys.argv) == 5):
qname = sys.argv[1]
rdtype = sys.argv[2]
expans = sys.argv[3]
nameserver = sys.argv[4]
if (rdtype == 'PTR'):
qname = dns.reversename.from_address(qname)
expans = expans + "."
elif (rdtype == 'MX' or rdtype == 'CNAME' or rdtype == 'NS'):
expans = expans + "."
try:
resolver = dns.resolver.Resolver()
resolver.lifetime = 3.0
resolver.nameservers = [nameserver]
resp = resolver.query(qname, rdtype)
resplen = len(resp)
def passed():
print "PASS: ", resp.rrset.to_text()
sys.exit(0)
def failed():
print "FAIL: ", resp.rrset.to_text()
sys.exit(1)
if (resplen > 1):
for line in resp:
ans = line.to_text()[(len(expans)*-1):]
if (ans == expans):
passed()
elif (ans != expans):
if (resplen > 1):
resplen -= 1
pass
else:
failed()
else:
failed()
else:
if (resp.rrset.to_text()[(len(expans)*-1):] == expans):
passed()
else:
failed()
except dns.resolver.NXDOMAIN:
print "FAIL: %s does not exist" % qname
sys.exit(1)
except dns.resolver.Timeout:
print "FAIL: Timeout reached"
sys.exit(1)
except dns.resolver.NoAnswer:
print "FAIL: No Answer"
sys.exit(1)
except dns.exception.DNSException:
print "Unknown error"
sys.exit(1)
else:
print """
Usage: ./dnslookup.py <qname> <rdtype> <expans> <nameserver>
<qname> - Query Name (A/CNAME: FQDN, NS/MX: Domain Name, PTR: IP Address)
<rdtype> - Query Type (A, MX, NS, CNAME, PTR)
<expans> - Expected Answer (A/CNAME: IP Address, PTR/CNAME/MX/NS: FQDN)
<nameserver> - IP Address of Nameserver to perform lookup against
"""