add dns recursor to dev setup

This commit is contained in:
j3d1 2026-08-19 14:14:17 +02:00
parent eaae7c286a
commit 6d2167ac66

View file

@ -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: