add dns recursor to dev setup
This commit is contained in:
parent
eaae7c286a
commit
6d2167ac66
1 changed files with 13 additions and 2 deletions
|
|
@ -3,6 +3,9 @@ import socketserver
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import dnslib
|
import dnslib
|
||||||
import base64
|
import base64
|
||||||
|
import socket
|
||||||
|
|
||||||
|
UPSTREAM_DNS = ("8.8.8.8", 53)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
|
@ -11,6 +14,13 @@ try:
|
||||||
if record["name"] == qname and record["type"] == qtype and "value" in record:
|
if record["name"] == qname and record["type"] == qtype and "value" in record:
|
||||||
return record["value"]
|
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):
|
class DnsHttpRequestHandler(http.server.BaseHTTPRequestHandler):
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
|
|
@ -40,15 +50,16 @@ try:
|
||||||
print("SRV record")
|
print("SRV record")
|
||||||
reply = dnslib.SRV(record["priority"], record["weight"], record["port"], record["target"])
|
reply = dnslib.SRV(record["priority"], record["weight"], record["port"], record["target"])
|
||||||
response.add_answer(dnslib.RR(dns.q.qname, dns.q.qtype, rdata=reply))
|
response.add_answer(dnslib.RR(dns.q.qname, dns.q.qtype, rdata=reply))
|
||||||
|
pack = response.pack()
|
||||||
else:
|
else:
|
||||||
response.header.rcode = dnslib.RCODE.NXDOMAIN
|
print(f"Recursively resolving {dns.q.qname}")
|
||||||
|
pack = resolve_recursive(raw)
|
||||||
|
|
||||||
print(response)
|
print(response)
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header("Content-type", "application/dns-message")
|
self.send_header("Content-type", "application/dns-message")
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
pack = response.pack()
|
|
||||||
self.wfile.write(pack)
|
self.wfile.write(pack)
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue