Skip to content

Instantly share code, notes, and snippets.

@nelix
Created July 1, 2009 05:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nelix/138597 to your computer and use it in GitHub Desktop.
Save nelix/138597 to your computer and use it in GitHub Desktop.
import asyncore, socket
from dns import resolver, rdatatype, rdataclass, message
# Stolen from here:
# http://glyphy.com/asynchronous-dns-queries-python-2008-02-09
class AsyncDNS(asyncore.dispatcher):
def __init__(self):
asyncore.dispatcher.__init__(self)
self.r = resolver.Resolver()
self.query = ''
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
self.connect((self.r.nameservers[0], self.r.port))
def makeQuery(self, server):
self.query = message.make_query('_xmpp-server._tcp.%s' % server,
rdatatype.SRV, rdataclass.IN).to_wire()
def writable(self):
return (len(self.query) > 0)
def handle_read(self):
data = self.recv(4096)
answer = message.from_wire(data)
print answer.answer[0].to_text()
def handle_write(self):
self.send(self.query)
self.query = ''
def handle_accept(self): pass
def handle_connect(self): pass
def handle_bind(self): pass
def handle_close(self): self.close()
if __name__ == "__main__":
d = AsyncDNS()
d.makeQuery('livejournal.com')
asyncore.loop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment