whois/src/whois.py
2013-02-03 02:15:54 +09:00

74 lines
1.5 KiB
Python

# -*- coding: utf-8 -*-
import sys
import os
import socket
import re
import error
class Whois(object):
def __init__(self, domain):
self.domain = domain
self.tld = self.domain.split(".")[-1]
self.currPath = os.path.dirname(os.path.realpath(__file__))
self.tldPath = os.path.join(self.currPath, "tlds")
self.tldList = os.listdir(self.tldPath)
self.settings = {}
if self.tld in self.tldList:
_settings = {}
execfile(os.path.join(self.tldPath, self.tld), {}, _settings)
if "server" in _settings:
self.settings.update(_settings["server"])
def chooseServer(self):
if "server" in self.settings:
return self.settings["host"]
else:
return self.tld + ".whois-servers.net"
def query(self, whoisServer):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((whoisServer, 43))
except:
# FIXME: Create a exception class for this
print "ERROR Could not connect to whois server %s"%(whoisServer)
return False
s.send(self.domain + "\r\n")
result = ""
while True:
buffer = s.recv(512)
if not buffer:
break
result += buffer
return result
def run(self, redirect=True):
whoisServer = self.chooseServer()
result = self.query(whoisServer)
if redirect and "redirect" in self.settings:
redirection = re.findall(self.settings["redirect"], result, re.MULTILINE)
while redirection and len(redirection) >= 1:
whoisServer = redirection[0]
result = self.query(whoisServer)
redirection = re.findall(self.settings["redirect"], result)
return whoisServer, result