Advertisement
rfmonk

dns_mx.py

Jan 25th, 2014
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.90 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. # thx foundations py net prog
  4. # looking up email domain
  5.  
  6. import sys
  7. import DNS
  8.  
  9. if len(sys.argv) != 2:
  10.     print >>sys.stderr, 'usage: dns_mx.py <hostname>'
  11.     sys.exit(2)
  12.  
  13.  
  14. def resolve_hostname(hostname, indent=0):
  15.     """Print an A or AAAA record for `hostname`; follow CNAMEs if necessary."""
  16.     indent = indent + 4
  17.     istr = ' ' * indent
  18.     request = DNS.Request()
  19.     reply = request.req(name=sys.argv[1], qtype=DNS.Type.A)
  20.     if reply.answers:
  21.         for answer in reply.answers:
  22.             print istr, 'Hostname', hostname, '= A', answer['data']
  23.         return
  24.     reply = request.req(name=sys.argv[1], qtype=DNS.Type.AAAA)
  25.     if reply.answers:
  26.         for answer in reply.answers:
  27.             print istr, 'Hostname', hostname, '= AAAA', answer['data']
  28.         return
  29.     reply = request.req(name=sys.argv[1], qtype=DNS.Type.CNAME)
  30.     if reply.answers:
  31.         cname = reply.answers[0]['data']
  32.         print istr, 'Hostname', hostname, 'is an alias for', cname
  33.         resolve_hostname(cname, indent)
  34.         return
  35.     print istr, 'ERROR: no records for', hostname
  36.  
  37.  
  38. def resolve_email_domain(domain):
  39.     """Print mail server IP for email address @ `domain`."""
  40.     request = DNS.Request()
  41.     reply = request.req(name=sys.argv[1], qtype=DNS.Type.MX)
  42.     if reply.answers:
  43.         print 'The domain %r has explicit MX records!' % (domain,)
  44.         print 'Try the servers in this order:'
  45.         datalist = [answer['data'] for answer in reply.answers]
  46.         datalist.sort()
  47.         for data in datalist:
  48.             priority = data[0]
  49.             hostname = data[1]
  50.             print 'Priority:', priority, ' Hostname:', hostname
  51.             resolve_hostname(hostname)
  52.     else:
  53.         print 'Drat, this domain has no explicit MX records'
  54.         print 'We will have to try resolving it as an A, AAAA, or CNAME'
  55.         resolve_hostname(domain)
  56.  
  57. DNS.DiscoverNameServers()
  58. resolve_email_domain(sys.argv[1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement