diff --git a/deploy/dev/dns_server.py b/deploy/dev/dns_server.py index 1457699..00ef139 100644 --- a/deploy/dev/dns_server.py +++ b/deploy/dev/dns_server.py @@ -3,6 +3,9 @@ import socketserver import urllib.parse import dnslib import base64 +import socket + +UPSTREAM_DNS = ("8.8.8.8", 53) try: @@ -11,6 +14,13 @@ try: if record["name"] == qname and record["type"] == qtype and "value" in record: return record["value"] + def resolve_recursive(raw_query): + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: + sock.settimeout(5) + sock.sendto(raw_query, UPSTREAM_DNS) + data, _ = sock.recvfrom(4096) + return data + class DnsHttpRequestHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): @@ -40,15 +50,16 @@ try: print("SRV record") reply = dnslib.SRV(record["priority"], record["weight"], record["port"], record["target"]) response.add_answer(dnslib.RR(dns.q.qname, dns.q.qtype, rdata=reply)) + pack = response.pack() else: - response.header.rcode = dnslib.RCODE.NXDOMAIN + print(f"Recursively resolving {dns.q.qname}") + pack = resolve_recursive(raw) print(response) self.send_response(200) self.send_header("Content-type", "application/dns-message") self.end_headers() - pack = response.pack() self.wfile.write(pack) return except Exception as e: