30 lines
1.2 KiB
Python
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()
|