首页 > 解决方案 > 仅使用股票 python2.7 库对特定服务器的 DNS 查询

问题描述

我需要在具有 Python 2.7 和库(以及 Chrome)和 p的环境中测试来自特定服务器(即8.8.8.8或)的 DNS 响应。我无法安装任何其他软件包。我将脚本作为文本提供,然后由远程系统运行。4.2.2.2seleniumrequestsysftp

我只需要查询特定的 DNS 服务器并验证其响应是否与预期地址匹配。

关于如何做的任何建议?

标签: pythondns

解决方案


requests您一起可以进行 HTTP/HTTPS 查询。

存在较新的协议,例如 DoH,它是基于 HTTPS 的 DNS。

如果您要查询的服务器具有这样的端点,或者任何使用某种 DNS 的等效 HTTPS 端点,那么您可以查询它。

幸运的是,谷歌公共 DNS 有这样一个端点,请参阅https://developers.google.com/speed/public-dns/docs/doh/

https://developers.google.com/speed/public-dns/docs/doh/json上的 JSON 版本更易于手动使用(否则您必须在 base64 中对 DNS 数据包内容进行编码,这样工作量更大,对于解码回复):

In [1]: import requests

In [2]: r=requests.get('https://dns.google/resolve?name=www.example.com&type=AAAA').json()

In [3]: print r
{u'Status': 0, u'AD': True, u'Question': [{u'type': 28, u'name': u'www.example.com.'}], u'CD': False, u'RD': True, u'RA': True, u'Answer': [{u'data': u'2606:2800:220:1:248:1893:25c8:1946', u'type': 28, u'name': u'www.example.com.', u'TTL': 10740}], u'TC': False}

In [4]: print r['Answer'][0]['data']
2606:2800:220:1:248:1893:25c8:1946

当然,需要进行一些错误检查。dns.google当然是8.8.8.8

PS:业务限制,例如“我无法安装任何额外的软件包”。很傻,你应该和他们战斗。谁会接受去车库听机械师说“除了扳手我不能用任何工具”,或者去医院做手术听外科医生说“我只能用剪刀做心脏移植手术” . 换一种说法:一个人必须能够使用完成其工作所需的工具(在你的情况下,dnspython图书馆)

PS2:不要以为只有谷歌提供免费的公共DNS服务;许多其他组织都这样做了,当人们碰巧将所有东西集中在一个地方时,只会发生坏事,即使你喜欢谷歌。您也有众所周知的1.1.1.19.9.9.9并且您可以在https://en.wikipedia.org/wiki/Public_recursive_name_server找到许多提供 DoH 端点的公共 DNS 运营商的列表。


推荐阅读