Ejemplo n.º 1
0
    def handle(self):
        data, sock = self.request
        src, port = self.client_address
        request, request_type = parse_packet(self.client_address, data)

        # Try Cache
        cached_response = self.server.cache.get(request)
        if cached_response:
            response = DNS(cached_response.get('response'))
            response.id = request.id
            self.send_packet(sock, request, response.__bytes__())
            logging.info('TX: {}:{} - CACHED, Question: {}'.format(
                src, port, request.qd.qname))
            return

        # Try Hooks
        response = process_packet(request, self.server.hooks,
                                  self.client_address, request_type)
        if response:
            self.send_packet(sock, request, response)
            return

        # Try DNS Server
        logging.info('TX: {}:{} - Forwarding DNS record(s) from {}'.format(
            src, port, self.server.dns_server))
        response = self.__forward_request_to_dns_server(data)
        self.send_packet(sock, request, response, cache=False)