import socketserver import ipaddr class Daemon(): def __init__(self, data): self.data = data def query(self, q): if self.is_ip(q): self.search_ip(q) elif self.is_domain(q): self.search_domain(q) else: # Try to find a person with the given query person = search_person(q) if person: return person else: return self.get_help() def search_ip(self, ip): result = {} # Iterate over all IP block elements networks = self.data.get_networks() for key in networks: for block in networks[key].ip_blocks: if ipaddr.IPAddress(ip) in ipaddr.IPNetwork(block): result['name'] = networks[key].name for k in networks[key].data: result[k] = networks[key].data[k] return result result['error'] = "Red no encontrada" return result # TODO def search_domain(self, domain): pass # TODO def search_person(self, query): pass # TODO def is_ip(self, query): return True # TODO def is_domain(self, query): pass # TODO def get_help(self): return "This will be the help" # TODO def get_footer(self): return "This will be the footer" # TODO def get_header(self): return "This will be the header" class WhoisHandler(socketserver.BaseRequestHandler): def setup(self): self.daemon = self.server.daemon def handle(self): data = str(self.request.recv(100), 'utf-8')[:-2] response = self.daemon.get_header() + "\n" response += self.daemon.query(data) + "\n" response += self.daemon.get_footer() self.request.sendall(response) class ClassicServer(socketserver.ThreadingTCPServer): def __init__(self, config, daemon): host = config['Servers']['classic_host'] port = int(config['Servers']['classic_port']) self.daemon = daemon socketserver.ThreadingTCPServer.__init__(self, (host, port), WhoisHandler) class WebServer(socketserver.ThreadingTCPServer): def __init__(self, config, daemon): self.host = config['Servers']['web_host'] self.port = int(config['Servers']['web_port']) self.daemon = daemon socketserver.ThreadingTCPServer.__init__(self, (self.host, self.port), WhoisHandler)