class documentation

class Resolver(common.ResolverBase): (source)

View In Hierarchy

Method __getstate__ Undocumented
Method __init__ No summary
Method __setstate__ Undocumented
Method connection​Lost Called by associated dns.DNSProtocol instances when they disconnect.
Method connection​Made Called by associated dns.DNSProtocol instances when they connect.
Method filter​Answers Extract results from the given message.
Method lookup​Zone Perform an AXFR record lookup.
Method maybe​Parse​Config Undocumented
Method message​Received Undocumented
Method parse​Config Undocumented
Method pick​Server Return the address of a nameserver.
Method query​TCP Make a number of DNS queries via TCP.
Method query​UDP Make a number of DNS queries via UDP.
Class Variable index Undocumented
Instance Variable connections Undocumented
Instance Variable dyn​Servers Undocumented
Instance Variable factory Undocumented
Instance Variable pending Undocumented
Instance Variable resolv Undocumented
Instance Variable servers Undocumented
Instance Variable timeout Undocumented
Method _cb​Lookup​Zone Undocumented
Method _connected​Protocol Return a new DNSDatagramProtocol bound to a randomly selected port number.
Method _lookup Build a dns.Query for the given parameters and dispatch it via UDP.
Method _open​File Wrapper used for opening files in the class, exists primarily for unit testing purposes.
Method _query Get a new DNSDatagramProtocol instance from _connectedProtocol, issue a query to it using *args, and arrange for it to be disconnected from its transport after the query completes.
Method _reissue Undocumented
Method _timeout​Zone Undocumented
Class Variable _resolv​Read​Interval Undocumented
Instance Variable _last​Resolv​Time Undocumented
Instance Variable _parse​Call Undocumented
Instance Variable _reactor A provider of IReactorTCP, IReactorUDP, and IReactorTime which will be used to set up network resources and track timeouts.
Instance Variable _waiting A dict mapping tuple keys of query name/type/class to Deferreds which will be called back with the result of those queries. This is used to avoid issuing the same query more than once in parallel. This is more efficient on the network and helps avoid a "birthday paradox" attack by keeping the number of outstanding requests for a particular query fixed at one instead of allowing the attacker to raise it to an arbitrary number.

Inherited from ResolverBase:

Method exception​For​Code Convert a response code (one of the possible values of dns.Message.rCode to an exception instance representing it.
Method get​Host​By​Name Resolve the domain name name into an IP address.
Method lookup​Address Perform an A record lookup.
Method lookup​Address6 Perform an A6 record lookup.
Method lookup​AFSDatabase Perform an AFSDB record lookup.
Method lookup​All​Records Perform an ALL_RECORD lookup.
Method lookup​Authority Perform an SOA record lookup.
Method lookup​Canonical​Name Perform a CNAME record lookup.
Method lookup​Host​Info Perform a HINFO record lookup.
Method lookup​IPV6​Address Perform an AAAA record lookup.
Method lookup​Mail​Box Perform an MB record lookup.
Method lookup​Mailbox​Info Perform an MINFO record lookup.
Method lookup​Mail​Exchange Perform an MX record lookup.
Method lookup​Mail​Group Perform an MG record lookup.
Method lookup​Mail​Rename Perform an MR record lookup.
Method lookup​Nameservers Perform an NS record lookup.
Method lookup​Naming​Authority​Pointer Perform a NAPTR record lookup.
Method lookup​Null Perform a NULL record lookup.
Method lookup​Pointer Perform a PTR record lookup.
Method lookup​Responsibility Perform an RP record lookup.
Method lookup​Sender​Policy Perform a SPF record lookup.
Method lookup​Service Perform an SRV record lookup.
Method lookup​Text Perform a TXT record lookup.
Method lookup​Well​Known​Services Perform a WKS record lookup.
Method query Dispatch query to the method which can handle its type.
Instance Variable type​To​Method Undocumented
Method _cb​Records Undocumented
Class Variable _errormap A dict mapping DNS protocol failure response codes to exception classes which will be used to represent those failures.
Class Variable _log Undocumented
def __getstate__(self): (source)

Undocumented

def __init__(self, resolv=None, servers=None, timeout=(1, 3, 11, 45), reactor=None): (source)
Construct a resolver which will query domain name servers listed in the resolv.conf(5)-format file given by resolv as well as those in the given servers list. Servers are queried in a round-robin fashion. If given, resolv is periodically checked for modification and re-parsed if it is noticed to have changed.
Parameters
resolv:strFilename to read and parse as a resolver(5) configuration file.
servers:list of (str, int) or NoneIf not None, interpreted as a list of (host, port) pairs specifying addresses of domain name servers to attempt to use for this lookup. Host addresses should be in IPv4 dotted-quad form. If specified, overrides resolv.
timeout:Sequence of intDefault number of seconds after which to reissue the query. When the last timeout expires, the query is considered failed.
reactorA provider of IReactorTime, IReactorUDP, and IReactorTCP which will be used to establish connections, listen for DNS datagrams, and enforce timeouts. If not provided, the global reactor will be used.
Raises
ValueErrorRaised if no nameserver addresses can be found.
def __setstate__(self, state): (source)

Undocumented

def connectionLost(self, protocol): (source)
Called by associated dns.DNSProtocol instances when they disconnect.
def connectionMade(self, protocol): (source)
Called by associated dns.DNSProtocol instances when they connect.
def filterAnswers(self, message): (source)

Extract results from the given message.

If the message was truncated, re-attempt the query over TCP and return a Deferred which will fire with the results of that query.

If the message's result code is not twisted.names.dns.OK, return a Failure indicating the type of error which occurred.

Otherwise, return a three-tuple of lists containing the results from the answers section, the authority section, and the additional section.

def lookupZone(self, name, timeout=10): (source)

Perform an AXFR record lookup.

NB This is quite different from other DNS requests. See http://cr.yp.to/djbdns/axfr-notes.html for more information.

NB Unlike other lookup* methods, the timeout here is not a list of ints, it is a single int.

Parameters
nameDNS name to resolve.
timeoutWhen this timeout expires, the query is considered failed.
Returns
A Deferred which fires with a three-tuple of lists of twisted.names.dns.RRHeader instances. The first element of the tuple gives answers. The second and third elements are always empty. The Deferred may instead fail with one of the exceptions defined in twisted.names.error or with NotImplementedError.
def maybeParseConfig(self): (source)

Undocumented

def messageReceived(self, message, protocol, address=None): (source)

Undocumented

def parseConfig(self, resolvConf): (source)

Undocumented

def pickServer(self): (source)

Return the address of a nameserver.

TODO: Weight servers for response time so faster ones can be preferred.

def queryTCP(self, queries, timeout=10): (source)
Make a number of DNS queries via TCP.
Parameters
queries:Any non-zero number of dns.Query instancesThe queries to make.
timeout:intThe number of seconds after which to fail.
Returns
DeferredUndocumented
def queryUDP(self, queries, timeout=None): (source)
Make a number of DNS queries via UDP.
Parameters
queries:A list of dns.Query instancesThe queries to make.
timeout:Sequence of intNumber of seconds after which to reissue the query. When the last timeout expires, the query is considered failed.
Returns
Deferred @raise twisted.internet.defer.TimeoutError: When the query times out.Undocumented
index: int = (source)

Undocumented

connections: list = (source)

Undocumented

dynServers = (source)

Undocumented

factory = (source)

Undocumented

pending: list = (source)

Undocumented

resolv = (source)

Undocumented

servers: list = (source)

Undocumented

timeout = (source)

Undocumented

def _cbLookupZone(self, result, connector): (source)

Undocumented

def _connectedProtocol(self, interface=''): (source)
Return a new DNSDatagramProtocol bound to a randomly selected port number.
def _lookup(self, name, cls, type, timeout): (source)

Build a dns.Query for the given parameters and dispatch it via UDP.

If this query is already outstanding, it will not be re-issued. Instead, when the outstanding query receives a response, that response will be re-used for this query as well.

Parameters
name:strUndocumented
cls:intUndocumented
type:intUndocumented
timeoutUndocumented
Returns
A Deferred which fires with a three-tuple giving the answer, authority, and additional sections of the response or with a Failure if the response code is anything other than dns.OK.
def _openFile(self, path): (source)
Wrapper used for opening files in the class, exists primarily for unit testing purposes.
def _query(self, *args): (source)
Get a new DNSDatagramProtocol instance from _connectedProtocol, issue a query to it using *args, and arrange for it to be disconnected from its transport after the query completes.
Parameters
*argsPositional arguments to be passed to DNSDatagramProtocol.query.
Returns
A Deferred which will be called back with the result of the query.
def _reissue(self, reason, addressesLeft, addressesUsed, query, timeout): (source)

Undocumented

def _timeoutZone(self, d, controller, connector, seconds): (source)

Undocumented

_resolvReadInterval: int = (source)

Undocumented

_lastResolvTime = (source)

Undocumented

_parseCall = (source)

Undocumented

_reactor = (source)
A provider of IReactorTCP, IReactorUDP, and IReactorTime which will be used to set up network resources and track timeouts.
_waiting: dict = (source)
A dict mapping tuple keys of query name/type/class to Deferreds which will be called back with the result of those queries. This is used to avoid issuing the same query more than once in parallel. This is more efficient on the network and helps avoid a "birthday paradox" attack by keeping the number of outstanding requests for a particular query fixed at one instead of allowing the attacker to raise it to an arbitrary number.