nadzoring.dns_lookup.compare module

DNS server comparison for analysing differences between resolvers.

class nadzoring.dns_lookup.compare.DifferenceDetail[source]

Bases: TypedDict

Detailed information about a detected difference between DNS servers.

server

IP address of the server that returned a different response.

Type:

str

type

DNS record type where the difference was detected.

Type:

str

expected

Records expected (from the baseline server).

Type:

list[str]

got

Actual records received from this server.

Type:

list[str]

ttl_difference

Absolute TTL difference in seconds, or None when TTL data is unavailable for either server.

Type:

int | None

expected: list[str]
got: list[str]
server: str
ttl_difference: int | None
type: str
class nadzoring.dns_lookup.compare.ServerComparisonResult[source]

Bases: TypedDict

Result of comparing DNS responses from multiple servers.

domain

The domain name that was queried.

Type:

str

servers

Nested dict mapping server IPs to per-record-type results.

Type:

dict[str, dict[str, nadzoring.dns_lookup.types.DNSResult]]

differences

List of detected differences between servers.

Type:

list[dict[str, Any]]

differences: list[dict[str, Any]]
domain: str
servers: dict[str, dict[str, DNSResult]]
nadzoring.dns_lookup.compare._calculate_ttl_difference(ttl1: int | None, ttl2: int | None) int | None[source]

Return the absolute difference between two TTL values.

Parameters:
  • ttl1 – First TTL in seconds.

  • ttl2 – Second TTL in seconds.

Returns:

Absolute difference when both values are provided, None otherwise.

nadzoring.dns_lookup.compare.compare_dns_servers(domain: str, servers: list[str], record_types: list[str], progress_callback: Callable[[], None] | None = None) ServerComparisonResult[source]

Compare DNS responses from multiple servers for the same domain.

Uses the first server in servers as the baseline. Each subsequent server’s records are compared against the baseline; discrepancies are collected in differences.

Parameters:
  • domain – Domain name to query (e.g. "example.com").

  • servers – DNS server IPs to compare. The first entry is the baseline.

  • record_types – Record types to query on every server.

  • progress_callback – Called after each successful query. Useful for progress bars.

Returns:

ServerComparisonResult with domain, servers, and differences keys.

Examples

>>> result = compare_dns_servers(
...     "example.com",
...     servers=["8.8.8.8", "1.1.1.1"],
...     record_types=["A", "MX"],
... )
>>> result["differences"]
[]