nadzoring.dns_lookup.utils module

Utility functions for DNS lookup module.

nadzoring.dns_lookup.utils.create_resolver(nameserver: str | None = None, timeout: float = 5.0, lifetime: float = 10.0) Resolver[source]

Create and configure a DNS resolver instance.

Parameters:
  • nameserver – Optional nameserver IP address. When None the system default resolvers are used.

  • timeout – Per-nameserver query timeout in seconds. Defaults to 5.0.

  • lifetime – Total query lifetime in seconds, including retries across nameservers. Defaults to 10.0.

Returns:

Configured dns.resolver.Resolver ready for queries.

Examples

>>> resolver = create_resolver("8.8.8.8", timeout=3.0, lifetime=8.0)
>>> answers = resolver.resolve("example.com", "A")
nadzoring.dns_lookup.utils.extract_records(answers: Answer, record_type: str) list[str][source]

Extract and format DNS records from a resolver answer.

Applies record-type-specific formatting:

  • MX"priority mailserver"

  • TXT — all string parts joined into one string

  • SOA — space-joined SOA fields

  • other — plain str() with trailing dot stripped

Parameters:
  • answersdns.resolver.Answer returned by Resolver.resolve().

  • record_type – DNS record type string (e.g. "A", "MX").

Returns:

List of formatted record strings.

Examples

>>> answers = resolver.resolve("example.com", "MX")
>>> extract_records(answers, "MX")
['10 mail.example.com', '20 backup.example.com']
nadzoring.dns_lookup.utils.get_public_dns_servers() list[str][source]

Return a list of well-known public DNS server IP addresses.

Includes resolvers from Google, Cloudflare, OpenDNS, Quad9, and Verisign.

Returns:

List of DNS server IP address strings.

Examples

>>> servers = get_public_dns_servers()
>>> "8.8.8.8" in servers
True
nadzoring.dns_lookup.utils.resolve_with_timer(domain: str, record_type: RecordType = 'A', nameserver: str | None = None, *, include_ttl: bool = False, timeout: float = 5.0, lifetime: float = 10.0) DNSResult[source]

Perform DNS resolution with timing and structured error handling.

Resolves domain for record_type, measuring response time and optionally capturing TTL. All DNS errors are surfaced through the error field rather than raised.

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

  • record_type – DNS record type to query. Defaults to "A".

  • nameserver – Optional nameserver IP; None uses the system default.

  • include_ttl – Include TTL value in result. Defaults to False.

  • timeout – Per-nameserver query timeout in seconds. Defaults to 5.0.

  • lifetime – Total query lifetime in seconds. Defaults to 10.0.

Returns:

DNSResult dict with domain, record_type, records, ttl, error, and response_time keys.

Examples

>>> result = resolve_with_timer("example.com", "MX", include_ttl=True)
>>> if not result["error"]:
...     print(result["records"], result["ttl"])