Files
hse-2026/materials/07-naming-lookup/seminar/dns/delegation.py
T
2026-10-21 23:03:28 +03:00

30 lines
1.2 KiB
Python

"""Trace the real private hierarchy root-dns -> tld-dns -> auth."""
import subprocess
def dig(*args):
command = ["dig", "-r", *args, "+time=2", "+tries=1"]
print("\n$ " + " ".join(command), flush=True)
result = subprocess.run(command, capture_output=True, text=True, timeout=20)
print(result.stdout, flush=True)
if result.returncode:
raise RuntimeError(result.stderr or result.stdout)
return result.stdout
def main():
print("Private hierarchy: root-dns (.) -> tld-dns (test.) -> auth (lab.test.)")
trace = dig("@root-dns", "+trace", "+nodnssec", "orders.lab.test", "A")
assert "192.0.2." in trace and "ns.test." in trace and "ns.lab.test." in trace
referral = dig("@root-dns", "orders.lab.test", "A", "+norecurse")
assert "ANSWER: 0" in referral and "ns.test." in referral
tld = dig("@tld-dns", "orders.lab.test", "A", "+norecurse")
assert "ANSWER: 0" in tld and "ns.lab.test." in tld
final = dig("@auth", "orders.lab.test", "A", "+norecurse")
assert "192.0.2." in final and "flags: qr aa" in final
print("PASS: real root/TLD referrals and final authoritative answer in the private hierarchy")
if __name__ == "__main__":
main()