looking for a python whois interface

Fredrik Lundh effbot at telia.com
Thu Mar 16 20:06:49 CET 2000


matthew snyder <matthew at analog.pobox.com> wrote:
> i'm looking for an interface to whois that i can use to determine
> if a given domain name is registered.  right now, i'm doing:
>
> # `domain' is already checked for malicious characters
> res = os.popen("%s %s" % (PATH_TO_WHOIS, domain)).read()
>
> then re.match()ing res to see if it contains whatever string
> whois returns today that indicates that the domain exists.
>
> i'd like something a bit more elegant.  any pointers?

here's a simple asyncore-based whois client that can process
a whole bunch of requests in parallel.  just subclass WhoisClient
to suit your own needs.

# whois-example-1.py

import asyncore
import socket

class WhoisRequest(asyncore.dispatcher_with_send):
    # simple whois requestor

    def __init__(self, consumer, query, host, port=43):
        asyncore.dispatcher_with_send.__init__(self)

        self.consumer = consumer
        self.query = query

        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect((host, port))

    def handle_connect(self):
        self.send(self.query + "\r\n")

    def handle_expt(self):
        self.close() # connection failed, shutdown
        self.consumer.abort()

    def handle_read(self):
        # get data from server
        self.consumer.feed(self.recv(2048))

    def handle_close(self):
        self.close()
        self.consumer.close()

class WhoisConsumer:

    def __init__(self, host):
        self.text = ""
        self.host = host

    def feed(self, text):
        self.text = self.text + text

    def abort(self):
        print self.host, "=>", "failed"

    def close(self):
        print self.host, "=>"
        print self.text

#
# try it out

for host in ("python.org", "pythonware.com", "pythonwarez.com"):
    consumer = WhoisConsumer(host)
    request = WhoisRequest(consumer, host, "whois.internic.net")

# loop returns when all requests have been processed
asyncore.loop()

</F>





More information about the Python-list mailing list