aio-doh icon indicating copy to clipboard operation
aio-doh copied to clipboard

Asynchronous DNS-over-HTTPS client for Python

.. image:: https://travis-ci.org/ZhukovAlexander/aio-doh.svg?branch=master :target: https://travis-ci.org/ZhukovAlexander/aio-doh


D'oh!


aio-doh is a tiny asynchronous client for Google's Public DNS-over-HTTPS <https://developers.google.com/speed/public-dns/docs/dns-over-https>_ (DOH) service. Main advanteges of DOH is increased security due to DNSSEC and also speed, reliability and performance gains. The library is built on top of asyncio and aiohttp.

Installation ############

.. code-block:: bash

pip install aio-doh

Example usage #############

.. code-block:: python

>>> from doh import DOHClient
>>> from asyncio import get_event_loop
>>>
>>> loop = get_event_loop()
>>> client = DOHClient(loop)
>>>
>>> loop.run_until_complete(client.resolve('example.com'))
['93.184.216.34']
>>>
>>> from pprint import pprint as pp
>>> pp(loop.run_until_complete(client.query('example.com', type='AAAA'))) # doctest:+ELLIPSIS
{'AD': True,
 'Additional': [],
 'Answer': [{'TTL': ...,
             'data': '2606:2800:220:1:248:1893:25c8:1946',
             'name': 'example.com.',
             'type': 28}],
 'CD': False,
 'Question': [{'name': 'example.com.', 'type': 28}],
 'RA': True,
 'RD': True,
 'Status': 0,
 'TC': False,
 'edns_client_subnet': '0.0.0.0/0'}
>>>

API

The API is simple and small:

  • DOHClient.query(hostname, type, dnssec) Params: hostname - name of a target host; type - DNS record type for a query; dnssec - enable DNSSEC validation. Returns: Complete DNS response as a python dictionary.

  • DOHClient.resolve(hostname, type, dnssec) Params: hostname - name of a target host; type - DNS record type for a query; dnssec - enable DNSSEC validation. Returns: List of IP adresses.

  • DOHClient.gethostbyname(hostname, type, dnssec) Params: hostname - name of a target host; type - DNS record type for a query; dnssec - enable DNSSEC validation. Returns: First IP adress found if any or raises an error.

Documentation ############# TODO

Contributing ############ File an issue or create a pull request.