def udp_writer(sock, _queue: Queue):
    """ resolves queued dns queries, responds over udp port """
    logging.info('starting UDP DNS writer')
    while True:
        try:
            dns_request, client_address = _queue.get()
            dns_response = cloudflare_dns_over_tls(dns_request).pack()
            sock.sendto(dns_response, client_address)
            _queue.task_done()
        except:
            logging.exception('ERROR writing to udp sock')
            continue
def udp_server():
    logging.info('starting UDP DNS server')
    with socket.socket(type=socket.SOCK_DGRAM) as sock:
        # making sure the socket is reusable as we expose tcp and udp on the same port
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(ADDRESS)
        while True:
            try:
                dns_request, client_address = get_dns_request_over_udp(sock)
                dns_response = cloudflare_dns_over_tls(dns_request).pack()
                sock.sendto(dns_response, client_address)
            except:
                logging.exception('ERROR in udp server')
                continue
def tcp_writer(_queue: Queue):
    """
    resolves queued dns queries, responds over udp port
    no sock parameter needed here as tcp response is over new sock object created at communication start
    """
    logging.info('starting TCP DNS writer')
    while True:
        try:
            dns_request, connection = _queue.get()
            dns_response = cloudflare_dns_over_tls(dns_request).pack()
            response = struct.pack('!H', len(dns_response)) + dns_response
            connection.sendall(response)
            _queue.task_done()
        except:
            logging.exception('ERROR writing to tcp sock')
            continue
def tcp_server():
    logging.info('starting TCP DNS server')
    with socket.socket(type=socket.SOCK_STREAM) as sock:
        # making sure the socket is reusable as we expose tcp and udp on the same port
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(ADDRESS)
        sock.listen(5)
        while True:
            try:
                conn, address = sock.accept()
                dns_request = get_dns_request_over_tcp(conn)
                dns_response = cloudflare_dns_over_tls(dns_request).pack()
                response = struct.pack('!H', len(dns_response)) + dns_response
                conn.sendall(response)
            except:
                logging.exception('ERROR in tcp server')
                continue
 def resolve(self, request, handler):
     return cloudflare_dns_over_tls(request)
Ejemplo n.º 6
0
 def handle(self):
     data, connection = self.request
     response = cloudflare_dns_over_tls(DNSRecord.parse(data)).pack()
     connection.sendto(response, self.client_address)
Ejemplo n.º 7
0
 def handle(self):
     dns_request = get_dns_request_over_tcp(self.request)
     dns_response = cloudflare_dns_over_tls(dns_request).pack()
     response = struct.pack('!H', len(dns_response)) + dns_response
     self.request.sendall(response)