dnspython compatible DNSCrypt Resolver
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('22.214.171.124', '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>
__init__(self, address, provider_name, provider_pk, private_key=None, port=53, timeout=5)
- The IP address of the DNSCrypt resolver
- The port to use for communication with the DNSCrypt resolver
- The provider name for the DNSCrypt resolver. Takes the format <version>.dnscrypt-cert.<zone>.
- The provider’s hex-encoded public key or DNS hostname where to retreive the public 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 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)
tcp(self, query, timeout=None, af=None, source=None, source_port=0, one_rr_per_rrset=False)
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.)