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>
- 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.
Analogous to dns.resolver.Resolver.query for dnspython.
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.
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
.)