nadzoring.dns_lookup.reverse module¶
Reverse DNS lookup: IP address → hostname (PTR record).
Typical usage:
from nadzoring.dns_lookup.reverse import reverse_dns
from nadzoring.utils.result import unwrap
result = reverse_dns("8.8.8.8")
if result["error"]:
print("Lookup failed:", result["error"])
else:
print("Hostname:", result["hostname"])
print("RTT:", result["response_time"], "ms")
# Or raise on error:
safe_result = unwrap(result)
print(safe_result["hostname"])
- nadzoring.dns_lookup.reverse._make_result(ip_address: str) ReverseDNSResult[source]¶
Return a zeroed reverse-lookup result dict.
- nadzoring.dns_lookup.reverse.reverse_dns(ip_address: str, nameserver: str | None = None, timeout_config: TimeoutConfig | None = None) ReverseDNSResult[source]¶
Perform a reverse DNS lookup to resolve an IP address to a hostname.
Queries the PTR record for ip_address using
dns.reversename.from_address()for automaticin-addr.arpa/ip6.arpaname construction. Both IPv4 and IPv6 are supported.The function never raises; all failures are returned in the
"error"field so that callers can handle them uniformly. Error strings are defined innadzoring.dns_lookup.errors.DNSReverseError.- Parameters:
ip_address – IPv4 or IPv6 address to look up (e.g.
"8.8.8.8").nameserver – Optional nameserver IP address.
Noneuses the system default resolvers.timeout_config – Unified timeout configuration. If None, uses default.
- Returns:
ip_address: The original address queried (always present).hostname: Resolved hostname with trailing dot stripped, orNonewhen the lookup failed.error: Error message string on failure;Noneon success.response_time: Query round-trip time in milliseconds (2 d.p.), orNonewhen the query timed out.
- Return type:
ReverseDNSResultdict with the following keys
Examples
Successful lookup:
result = reverse_dns("8.8.8.8") assert result["hostname"] == "dns.google" assert result["error"] is None
Missing PTR record:
result = reverse_dns("192.168.1.1") assert result["hostname"] is None assert result["error"] == "No PTR record"
IPv6 address:
result = reverse_dns("2001:4860:4860::8888") print(result["hostname"]) # dns.google
Using a custom nameserver:
result = reverse_dns("8.8.8.8", nameserver="1.1.1.1")
Type-safe error handling:
from nadzoring.dns_lookup.errors import DNSReverseError result = reverse_dns("10.0.0.1") if result["error"] == "No PTR record": print("No reverse DNS configured") elif result["error"] == "Query timeout": print("Nameserver did not respond")