dnspython compatible DNSCrypt Resolver
Project description
This library is designed to make using DNSCrypt in Python easy and compatible with dnspython. It provides a dns.resolver.Resolver-style interface which mixes-in the dns.query.udp and dns.query.tcp functions.
>>> import dnscrypt >>> r = dnscrypt.Resolver('208.67.222.222', '2.dnscrypt-cert.opendns.com', ... 'B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79', ... port=53, timeout=5) >>> print r.query('www.google.com') <dns.resolver.Answer object at 0x103b6f450> >>> import dns.message >>> r.udp(dns.message.make_query('google.com', 'A')) <DNS message, ID 16075>
Class Methods
__init__(self, address, provider_name, provider_pk, private_key=None, port=53, timeout=5)
- address
The IP address of the DNSCrypt resolver
- port
The port to use for communication with the DNSCrypt resolver
- provider_name
The provider name for the DNSCrypt resolver. Takes the format <version>.dnscrypt-cert.<zone>.
- provider_pk
The provider’s hex-encoded public key or DNS hostname where to retreive the public key
- private_key
A hex-encoded private key if you want to reuse a key you already have. Otherwise, a new key will be generated for each Resolver instance.
- timeout
Timeout in seconds for DNS lookups
address, provider_name, and provider_pk are required. All other arguments are optional.
query(qname, rdtype=1, rdclass=1, tcp=False, source=None, raise_on_no_answer=True, source_port=0)
Analogous to dns.resolver.Resolver.query for dnspython.
tcp(self, query, timeout=None, af=None, source=None, source_port=0, one_rr_per_rrset=False)
Analogous to dns.query.tcp for dnspython. There is no where argument, but is otherwise identical in function/form.
udp(self, query, timeout=None, af=None, source=None, source_port=0, ignore_unexpected=False, one_rr_per_rrset=False)
Analogous to dns.query.udp for dnspython. There is no where argument, but is otherwise identical in function/form.
Differences from dnspython
The biggest thing is that this is a very basic implementation of dns.resolver.Resolver. While it’s designed to look/feel the same, it is not a drop in replacement. (e.g. I did not implement the use_tsig/use_edns/set_flags functions, instead use dns.message.Message and dnscrypt.resolver.tcp or dnscrypt.resolver.udp.)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.