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.
Initializes a DNS resolver with specified timeout parameters and optional custom nameserver.
- Parameters:
nameserver – Optional specific nameserver IP address to use for queries. If None, uses system default nameservers.
timeout – Query timeout in seconds for each individual nameserver. Defaults to 5.0 seconds.
lifetime – Total lifetime in seconds for the entire query operation. This includes retries across multiple nameservers. Defaults to 10.0 seconds.
- Returns:
Configured dns.resolver.Resolver instance ready for queries.
- Return type:
Resolver
Example
>>> 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 resolution answer.
Processes DNS answers based on record type, handling special formatting for complex record types like MX, TXT, and SOA.
- Parameters:
answers – DNS answer object from resolver.resolve() containing the resolved records.
record_type – Type of DNS record being processed (e.g., ‘A’, ‘MX’, ‘TXT’). Used to determine special formatting rules.
- Returns:
- List of formatted record strings. Format varies by record type:
MX: “priority mailserver” (e.g., “10 mail.example.com”)
TXT: Concatenated string parts (e.g., “v=spf1 include:…”)
SOA: fields: “mname rname serial refresh retry expire minimum”
Others: Simple string representation with trailing dots removed
- Return type:
List[str]
Example
>>> 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]¶
Get a list of well-known public DNS server IP addresses.
Returns a curated list of reliable public DNS resolvers from various providers suitable for testing or fallback scenarios.
- Returns:
- List of DNS server IP addresses including:
Google Public DNS (8.8.8.8, 8.8.4.4)
Cloudflare DNS (1.1.1.1, 1.0.0.1)
OpenDNS (208.67.222.222, 208.67.220.220)
Quad9 (9.9.9.9, 149.112.112.112)
Verisign Public DNS (64.6.64.6, 64.6.65.6)
- Return type:
List[str]
Example
>>> servers = get_public_dns_servers() >>> for server in servers[:3]: ... print(f"Testing DNS server: {server}")
- nadzoring.dns_lookup.utils.resolve_with_timer(domain: str, record_type: Literal['A', 'AAAA', 'CNAME', 'MX', 'NS', 'TXT', 'PTR', 'SOA', 'DNSKEY'] = 'A', nameserver: str | None = None, *, include_ttl: bool = False, timeout: float = 5.0, lifetime: float = 10.0) DNSResult[source]¶
Perform DNS resolution with timing information and error handling.
Resolves a domain name for a specific record type, measuring response time and optionally capturing TTL information. Handles common DNS errors gracefully.
- Parameters:
domain – Domain name to resolve (e.g., “example.com”).
record_type – DNS record type to query (e.g., “A”, “MX”, “TXT”). Defaults to “A”.
nameserver – Optional specific nameserver IP to use for resolution. If None, uses system default.
include_ttl – Whether to include TTL (Time To Live) value in result. Defaults to False.
timeout – Query timeout in seconds for each nameserver. Defaults to 5.0.
lifetime – Total query lifetime in seconds, including retries. Defaults to 10.0.
- Returns:
- Dictionary containing resolution results with structure:
domain: The queried domain name
record_type: The queried record type
records: List of resolved records (empty if resolution failed)
ttl: TTL in seconds if include_ttl=True and available, else None
error: Error message string if resolution failed, else None
response_time: Query response time in milliseconds, rounded to 2 decimals
- Return type:
Example
>>> result = resolve_with_timer("example.com", "MX", include_ttl=True) >>> if not result["error"]: ... print(f"Records: {result['records']}, TTL: {result['ttl']}")