我正在寻找一种 Python 实现,它允许我使用 DNS (EDNS) "client sub options"的扩展来解析 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 实现。

最佳答案

我是 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 的测试工具,而不是因为您必须以这种方式使用它。

    关于python - 使用 Python 中的客户端子网选项解析 dns (edns),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28609181/

    10-13 01:32