使用Python中的客户端子网选项解析dns(edns)

2024-03-29 06:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个Python实现,它允许我使用DNS(EDNS)“client sub options”的扩展解析DNS地址。此选项允许为内容交付系统提供更好的DNS解析,最终实现更快的internet路由。动机在这里有更好的解释:http://www.afasterinternet.com/howitworks.htm

另一个名称是“vandergaast edns客户端子网”

dig的实现如下: https://www.gsic.uva.es/~jnisigl/dig-edns-client-subnet.html

我正在寻找一个python实现,它可以实现相同的功能。在


Tags: clienthttp路由内容dns地址系统www
2条回答

存在一个python实现: 它是dnspython(http://www.dnspython.org/)的扩展,可以在这里找到:https://github.com/opendns/dnspython-clientsubnetoption

  1. 管道安装dnspython
  2. git从github克隆repo
  3. 使用此命令:

    Python子客户端选项(名称服务器)(主机到查询>;)-s(客户端ip)-m 32

  4. 请注意,回购并不实际打印结果。它只是一个测试者,所以它只是发出“成功”或“失败”的信号。要获得实际结果,您需要修改python代码以打印来自DNS服务器的响应。

我是dnspython客户端子网的开发/维护人员。它被设计为在代码中用作dnspython的一个附加项。我刚刚发布了版本2.0.0(在尝试了您想要的之后),它使一切变得更加简单

  1. pip install clientsubnetoption(适用于Python2和Python3)
  2. 导入clientsubnetoption和您需要的依赖项:

    import dns
    import clientsubnetoption
    
  3. 使用所需信息设置您的ClientSubnetOption

    cso = clientsubnetoption.ClientSubnetOption('1.2.3.4')
    
  4. 创建DNS包:

    message = dns.message.make_query('google.com', 'A')
    
  5. 添加edns选项:

    ^{4美元
  6. 使用message进行查询:

    r = dns.query.udp(message, '8.8.8.8')
    
  7. 选项信息现在位于r.options,并且可以有多个选项,因此您可能需要遍历它们来找到ClientSubnetOption对象。在

    for options in r.options:
        if isinstance(options, ClientSubnetOption):
            # do stuff here
            pass
    

代码子客户端选项是否可以作为一个单元测试和测试工具来支持edns clientsubnet,而不是因为必须那样使用它。在

相关问题 更多 >