dns
DNS module.
- exception wmflib.dns.DnsError[source]
Bases:
WmflibError
Custom exception class for errors of the Dns class.
- exception wmflib.dns.DnsNotFound[source]
Bases:
DnsError
Custom exception class to indicate the record was not found.
One or more resource records might exist for this domain but no record matches the resource record type requested.
- class wmflib.dns.Dns(*, nameserver_addresses: Sequence[str] | None = None, port: int | None = None)[source]
Bases:
object
Class to interact with the DNS.
Initialize the instance optionally specifying the nameservers to use.
Examples
Using the host’s default DNS resolvers:
>>> from wmflib.dns import Dns >>> dns = Dns()
Using a specific set of resolvers and port:
>>> from wmflib.dns import Dns >>> dns = Dns(nameserver_addresses=['10.0.0.1', '10.0.0.2'], port=5353)
- Parameters:
nameserver_addresses (Sequence, optional) – the nameserveres address to use, if not set uses the OS configuration.
port (int, optional) – the port the
nameserver_addresses
nameserveres is listening to, if different from the default 53. This applies only if a nameserveres is explicitelyes specified.
- resolve_ipv4(name: str) List[str] [source]
Perform a DNS lookup for an A record for the given name.
Examples
>>> dns.resolve_ipv4('api.svc.eqiad.wmnet') ['10.2.2.22']
- resolve_ipv6(name: str) List[str] [source]
Perform a DNS lookup for an AAAA record for the given name.
Examples
>>> dns.resolve_ipv6('wikimedia.org') ['2620:0:861:ed1a::1']
- resolve_ips(name: str) List[str] [source]
Perform a DNS lookup for A and AAAA records for the given name.
Examples
>>> dns.resolve_ips('wikimedia.org') ['208.80.154.224', '2620:0:861:ed1a::1']
- Parameters:
name (str) – the name to resolve.
- Returns:
the list of IPv4 and IPv6 addresses as strings returned by the DNS response.
- Return type:
- Raises:
wmflib.dns.DnsNotFound – when no address is found.
- resolve_ptr(address: str) List[str] [source]
Perform a DNS lookup for PTR record for the given address.
Examples
>>> dns.resolve_ptr('208.80.154.224') ['text-lb.eqiad.wikimedia.org']
- resolve_cname(name: str) str [source]
Perform a DNS lookup for CNAME record for the given name.
Examples
>>> dns.resolve_cname('puppet.codfw.wmnet') 'puppetmaster2001.codfw.wmnet'
- resolve(qname: str | Name, record_type: str) Answer [source]
Perform a DNS lookup for the given qname and record type.
Examples
>>> response = dns.resolve('wikimedia.org', 'MX') >>> [rdata.to_text() for rdata in response.rrset] ['10 mx1001.wikimedia.org.', '50 mx2001.wikimedia.org.']
- Parameters:
- Returns:
the DNS response.
- Return type:
- Raises:
wmflib.dns.DnsNotFound – if there are no records for the given record type but the qname has records for different record type(s).
wmflib.dns.DnsError – on generic error.
- class wmflib.dns.PublicAuthDns[source]
Bases:
Dns
Class to interact with the DNS using the wikimedia foundation authoritative servers.
Initialize the instance with the WMF public authoritative namerservers.
It uses the nameservers defined in
wmflib.constants.PUBLIC_AUTHDNS
.Examples
>>> from wmflib.dns import PublicAuthDns >>> dns = PublicAuthDns()