我正在寻找Python中的一个实现,它允许我使用DNS(EDNS)"客户端子选项"的扩展来解析DNS地址。 。此选项允许更好的DNS解析内容交付系统 - 并最终,更快的互联网路由。这里的动机有更好的解释:http://www.afasterinternet.com/howitworks.htm
另一个名称是" vandergaast-edns-client-subnet"
这里提供了dig的实现: https://www.gsic.uva.es/~jnisigl/dig-edns-client-subnet.html
我正在寻找能够做同样事情的python实现。
答案 0 :(得分:4)
我是dnspython-clientsubnet的开发者/维护者。它被设计为在您的代码中用作dnspython的添加剂。我刚刚发布了2.0.0版本(在尝试做你想做的事情之后),这使得一切变得更加容易
pip install clientsubnetoption
(适用于Python2和Python3)导入clientsubnetoption
以及您需要的依赖项:
import dns
import clientsubnetoption
使用您想要的信息设置ClientSubnetOption
:
cso = clientsubnetoption.ClientSubnetOption('1.2.3.4')
创建您的DNS数据包:
message = dns.message.make_query('google.com', 'A')
添加edns选项:
message.use_edns(options=[cso])
使用message
进行查询:
r = dns.query.udp(message, '8.8.8.8')
选项信息现在位于r.options
,可能有多个,因此您可能需要遍历它们才能找到ClientSubnetOption
对象。
for options in r.options:
if isinstance(options, ClientSubnetOption):
# do stuff here
pass
clientsubnetoption.py中的代码用作单元测试和支持edns-clientsubnet的测试工具,不是因为你必须这样使用它。
答案 1 :(得分:1)
存在一个python实现: 它是dnspython(http://www.dnspython.org/)的扩展,可以在这里找到:https://github.com/opendns/dnspython-clientsubnetoption
使用此命令:
python clientsubnetoption.py(name-server)(查询主机>)-s(client-ip)-m 32
请注意,repo实际上不会打印结果。它只是一个测试人员,所以它只是发出成功"或者"失败"。要获得实际结果,您需要修改python代码以打印来自DNS服务器的响应。