From 6eb86db61e3e59ad782cb0733bf933ddbb61fb68 Mon Sep 17 00:00:00 2001 From: kimbo Date: Mon, 30 Dec 2019 15:57:39 -0700 Subject: [PATCH] example for DNS over HTTPS --- examples/doh.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 examples/doh.py diff --git a/examples/doh.py b/examples/doh.py new file mode 100644 index 00000000..01c562f8 --- /dev/null +++ b/examples/doh.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# This is an example of sending DNS queries over HTTPS (DoH) with dnspython. +# Requires use of the requests module's Session object. +# +# See https://2.python-requests.org//en/latest/user/advanced/#session-objects +# for more details about Session objects +import requests + +import dns.message +import dns.query +import dns.rdatatype + + +def main(): + where = '1.1.1.1' + qname = 'example.com.' + # one method is to use context manager, session will automatically close + with requests.sessions.Session() as session: + q = dns.message.make_query(qname, dns.rdatatype.A) + r = dns.query.https(q, where, session) + for answer in r.answer: + print(answer) + + # ... do more lookups + + where = 'https://dns.google/dns-query' + qname = 'example.net.' + # second method, close session manually + session = requests.sessions.Session() + q = dns.message.make_query(qname, dns.rdatatype.A) + r = dns.query.https(q, where, session) + for answer in r.answer: + print(answer) + + # ... do more lookups + + # close the session when you're done + session.close() + +if __name__ == '__main__': + main() -- 2.47.3