Source code for nadzoring.dns_lookup.compare
# nadzoring/dns_lookup/compare.py
"""DNS server comparison functionality."""
from collections.abc import Callable
from typing import Any
from nadzoring.dns_lookup.types import DNSResult
from nadzoring.dns_lookup.utils import resolve_with_timer
[docs]
def compare_dns_servers(
domain: str,
servers: list[str],
record_types: list[str],
progress_callback: Callable | None = None,
) -> dict[str, Any]:
"""Compare DNS responses from different servers."""
result: dict[str, Any] = {
"domain": domain,
"servers": {},
"differences": [],
}
for i, server in enumerate(servers):
server_results: dict[str, dict] = {}
for rtype in record_types:
query_result: DNSResult = resolve_with_timer(
domain, rtype, server, include_ttl=True
)
server_results[rtype] = query_result
if i == 0:
query_result["differs"] = False
else:
base = result["servers"][servers[0]].get(rtype, {})
differs: bool = query_result.get("records") != base.get("records")
query_result["differs"] = differs
if differs:
result["differences"].append(
{
"server": server,
"type": rtype,
"expected": base.get("records"),
"got": query_result.get("records"),
}
)
if progress_callback:
progress_callback()
result["servers"][server] = server_results
return result