DNS/MX Lookup?

Andrew Bennetts andrew-pythonlist at puzzling.org
Mon Jun 16 04:55:22 EDT 2003


On Mon, Jun 16, 2003 at 07:43:02AM +0000, Chris White wrote:
> Well, I tried the python-dns module that exists out there, but it's not
> working so for.
> 
> It would be nice if there was a socket function to pull up info about mx
> servers for a domain name.  If anyone knows a working with (yes, here it
> comes) windoze operating system that simply uses the default nameserver or
> lets me set it for that matter (the later would be more prefered, as it
> would make it more cross platform compatible IMHO). 
> 
> Also, if anyone knows some good easy to understand (snicker) RFC's for DNS
> Querying (or some page that breaks it down) that would be great as well.

It's probably overkill, but you can do it with Twisted:

---- mxquery.py ----
#!/usr/bin/env python
"""Command-line util for resolving MXs.

Usage:
    mxquery.py example.com              # Uses DNS servers in /etc/resolv.conf
or
    mxquery.py example.com 1.2.3.4      # Uses DNS server 1.2.3.4

Adapted from doc/examples/dns-service.py in the Twisted distribution.
"""

from twisted.names import client
from twisted.internet import reactor
import sys

def printAnswer((answers, auth, add)):
    if not len(answers):
        print 'No answers'
    else:
        print '\n'.join([str(x.payload) for x in answers])
    reactor.stop()

def printFailure(arg):
    print "error: could not resolve:", arg
    reactor.stop()

if len(sys.argv) not in (2,3):
    sys.stderr.write('%s: usage:\n' % sys.argv[0] +
                     '  %s domain [dns server]\n' % sys.argv[0])
    sys.exit(1)
   
domain = sys.argv[1]
if len(sys.argv) == 2:
    resolver = client.Resolver('/etc/resolv.conf')
else:
    resolver = client.Resolver(servers=[(sys.argv[2],53)])

d = resolver.lookupMailExchange('%s' % (domain,), [3])
d.addCallbacks(printAnswer, printFailure)

reactor.run()
----

-Andrew.






More information about the Python-list mailing list