Change structure of tld configuration file. Add redirection support. WiP

This commit is contained in:
Larry Kim 2013-01-30 01:44:14 +09:00
parent 54e65759be
commit 42cf1019f3
4 changed files with 62 additions and 14 deletions

5
src/test.py Normal file
View File

@ -0,0 +1,5 @@
import whois
w = whois.Whois("kiding.net")
print w.run()

View File

@ -0,0 +1,15 @@
server = {
"host": "net.whois-servers.net",
"redirect": ".*Whois Server: (.*)",
}
parse = {
"regex": {
"default": {
},
"whois.dotname.co.kr":
{
},
}
}

View File

@ -0,0 +1,11 @@
server = {
"host": "org.whois-servers.net",
}
parse = {
"regex": {
"default": {
}
}
}

View File

@ -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"]
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"
else:
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