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

时间:2015-02-19 14:42:45

标签: python dns

我正在寻找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实现。

2 个答案:

答案 0 :(得分:4)

我是dnspython-clientsubnet的开发者/维护者。它被设计为在您的代码中用作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选项:

    message.use_edns(options=[cso])
    
  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
    
  8. clientsubnetoption.py中的代码用作单元测试和支持edns-clientsubnet的测试工具,不是因为你必须这样使用它。

答案 1 :(得分:1)

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

  1. pip install dnspython
  2. git克隆来自github的回购
  3. 使用此命令:

    python clientsubnetoption.py(name-server)(查询主机>)-s(client-ip)-m 32

  4. 请注意,repo实际上不会打印结果。它只是一个测试人员,所以它只是发出成功"或者"失败"。要获得实际结果,您需要修改python代码以打印来自DNS服务器的响应。

相关问题