Skip to content

Instantly share code, notes, and snippets.

@manics
Last active December 2, 2020 10:23
Show Gist options
  • Save manics/2545224d3c19ab381bfc899fa34c6e44 to your computer and use it in GitHub Desktop.
Save manics/2545224d3c19ab381bfc899fa34c6e44 to your computer and use it in GitHub Desktop.
MyBinder DNS
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import dns.resolver\n",
"import requests"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Query default DNS server"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/srv/conda/envs/notebook/lib/python3.7/site-packages/ipykernel_launcher.py:4: DeprecationWarning: please use dns.resolver.Resolver.resolve() instead\n",
" after removing the cwd from sys.path.\n"
]
},
{
"ename": "Timeout",
"evalue": "The DNS operation timed out after 2.103248119354248 seconds",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTimeout\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-2-6cb1525fcbaa>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mresolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mresolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlifetime\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mrdata\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mresolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'www.google.co.uk'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'A'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtcp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.7/site-packages/dns/resolver.py\u001b[0m in \u001b[0;36mquery\u001b[0;34m(self, qname, rdtype, rdclass, tcp, source, raise_on_no_answer, source_port, lifetime)\u001b[0m\n\u001b[1;32m 1089\u001b[0m return self.resolve(qname, rdtype, rdclass, tcp, source,\n\u001b[1;32m 1090\u001b[0m \u001b[0mraise_on_no_answer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msource_port\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlifetime\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1091\u001b[0;31m True)\n\u001b[0m\u001b[1;32m 1092\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1093\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mresolve_address\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mipaddr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.7/site-packages/dns/resolver.py\u001b[0m in \u001b[0;36mresolve\u001b[0;34m(self, qname, rdtype, rdclass, tcp, source, raise_on_no_answer, source_port, lifetime, search)\u001b[0m\n\u001b[1;32m 1041\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbackoff\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1042\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbackoff\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1043\u001b[0;31m \u001b[0mtimeout\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compute_timeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlifetime\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1044\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1045\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_address\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnameserver\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/srv/conda/envs/notebook/lib/python3.7/site-packages/dns/resolver.py\u001b[0m in \u001b[0;36m_compute_timeout\u001b[0;34m(self, start, lifetime)\u001b[0m\n\u001b[1;32m 948\u001b[0m \u001b[0mnow\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 949\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mduration\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mlifetime\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 950\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mduration\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 951\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlifetime\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mduration\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTimeout\u001b[0m: The DNS operation timed out after 2.103248119354248 seconds"
]
}
],
"source": [
"resolver = dns.resolver.Resolver(configure=True)\n",
"resolver.timeout = 2\n",
"resolver.lifetime = 2\n",
"for rdata in resolver.query('www.google.co.uk', 'A', tcp=False):\n",
" print(rdata)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Query 8.8.8.8"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"resolver = dns.resolver.Resolver(configure=False)\n",
"resolver.nameservers = ['8.8.8.8']\n",
"#['127.0.0.1']#\n",
"resolver.timeout = 2\n",
"resolver.lifetime = 2\n",
"for rdata in resolver.query('www.google.co.uk', 'A', tcp=False):\n",
" print(rdata)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"r = requests.get(f'http://{rdata.address}', allow_redirects=False)\n",
"print(r)\n",
"assert r.ok\n",
"print(r.status_code, r.headers['Location'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"r = requests.get(f'https://www.google.co.uk', allow_redirects=False)\n",
"print(r)\n",
"assert r.ok"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
name: dns
channels:
- conda-forge
dependencies:
- dnspython
- requests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment