1# -*- coding: utf-8 -*- 2 3try: 4 from dns import resolver 5 HAVE_DNSPYTHON=True 6except ImportError: 7 resolver = None 8 HAVE_DNSPYTHON=False 9 10try: 11 import DNS 12 HAVE_PYDNS=True 13 DNS.DiscoverNameServers() 14except ImportError: 15 DNS = None 16 HAVE_PYDNS=False 17 18ENABLED = DNSQUERY_EXTENSION_ENABLED = HAVE_DNSPYTHON or HAVE_PYDNS 19 20 21def lookup(hostname, qtype='A'): 22 try: 23 if HAVE_DNSPYTHON: 24 arecs = [] 25 arequest = resolver.query(hostname, qtype) 26 for rec in arequest: 27 arecs.append(rec.to_text()) 28 return arecs 29 30 elif HAVE_PYDNS: 31 return DNS.dnslookup(hostname, qtype) 32 33 except Exception: 34 return None 35 36 return None 37 38 39 40def mxlookup(domain): 41 try: 42 if HAVE_DNSPYTHON: 43 mxrecs = [] 44 mxrequest = resolver.query(domain, 'MX') 45 for rec in mxrequest: 46 mxrecs.append(rec.to_text()) 47 mxrecs.sort() #automatically sorts by priority 48 return [x.split(None,1)[-1] for x in mxrecs] 49 50 elif HAVE_PYDNS: 51 mxrecs=[] 52 mxrequest = DNS.mxlookup(domain) 53 for dataset in mxrequest: 54 if type(dataset) == tuple: 55 mxrecs.append(dataset) 56 57 mxrecs.sort() #automatically sorts by priority 58 return [x[1] for x in mxrecs] 59 60 except Exception: 61 return None 62 63 return None 64 65 66 67def revlookup(ip): 68 a = ip.split('.') 69 a.reverse() 70 revip = '.'.join(a)+'.in-addr.arpa' 71 return lookup(revip, qtype='PTR') 72 73 74