diff --git a/src/test.py b/src/test.py new file mode 100644 index 0000000..1a9ef1e --- /dev/null +++ b/src/test.py @@ -0,0 +1,5 @@ +import whois + +w = whois.Whois("kiding.net") +print w.run() + diff --git a/src/tlds/net b/src/tlds/net index e69de29..f3a8bea 100644 --- a/src/tlds/net +++ b/src/tlds/net @@ -0,0 +1,15 @@ +server = { + "host": "net.whois-servers.net", + "redirect": ".*Whois Server: (.*)", +} + +parse = { + "regex": { + "default": { + + }, + "whois.dotname.co.kr": + { + }, + } +} diff --git a/src/tlds/org b/src/tlds/org index e69de29..8dfbdc8 100644 --- a/src/tlds/org +++ b/src/tlds/org @@ -0,0 +1,11 @@ +server = { + "host": "org.whois-servers.net", +} + +parse = { + "regex": { + "default": { + + } + } +} diff --git a/src/whois.py b/src/whois.py index e184778..d8e0a58 100644 --- a/src/whois.py +++ b/src/whois.py @@ -3,6 +3,7 @@ import sys import os import socket +import re class Whois(object): def __init__(self, domain): @@ -13,26 +14,27 @@ class Whois(object): self.tldPath = os.path.join(self.currPath, "tlds") self.tldList = os.listdir(self.tldPath) - def chooseServer(self): + self.settings = {} + if self.tld in self.tldList: - settings = {} - execfile(os.path.join(self.tldPath, self.tld), {}, settings) - if "server" in settings: - return settings["server"] - else: - return self.tld + ".whois-servers.net" + self.settings = {} + execfile(os.path.join(self.tldPath, self.tld), {}, self.settings) + def chooseServer(self): + if "server" in self.settings: + return self.settings["server"]["host"] else: - return self.tld + ".whois-servers.net" + return self.tld + ".whois-servers.net" - - def run(self, redirect=True): + def query(self, whoisServer): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.whoisServer = self.chooseServer() + try: - s.connect((self.whoisServer, 43)) + s.connect((whoisServer, 43)) except: - print "ERROR Could not connect to whois server %s"%(self.whoisServer) + # 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") @@ -41,9 +43,24 @@ class Whois(object): while True: buffer = s.recv(512) - if not buffer: break + if not buffer: + break result += buffer return result + def run(self, redirect=True): + result = self.query(self.chooseServer()) + + if redirect: + redirection = re.findall(self.settings["server"]["redirect"], result, re.MULTILINE) + + while redirection and len(redirection) >= 1: + result = self.query(redirection[0]) + redirection = re.findall(self.settings["server"]["redirect"], result) + + + return result + +