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

在Python中使用客户端子网选项解析dns(EDN),python,dns,Python,Dns,我正在寻找一个Python实现,它允许我使用DNS(EDNS)“客户端子选项”的扩展解析DNS地址。此选项允许为内容交付系统提供更好的DNS解析,并最终实现更快的internet路由。这里可以更好地解释动机: 另一个名称是“vandergaast edns客户端子网” 可在以下位置获得dig的实现: 我正在寻找一个与此相同的python实现。存在一个python实现: 它是dnspython()的一个扩展,可以在这里找到: pip安装dnspython git从github克隆repo 使用此

我正在寻找一个Python实现,它允许我使用DNS(EDNS)“客户端子选项”的扩展解析DNS地址。此选项允许为内容交付系统提供更好的DNS解析,并最终实现更快的internet路由。这里可以更好地解释动机:

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

可在以下位置获得dig的实现:


我正在寻找一个与此相同的python实现。

存在一个python实现: 它是dnspython()的一个扩展,可以在这里找到:

  • pip安装dnspython
  • git从github克隆repo
  • 使用此命令:

    python clientsubnetoption.py(名称服务器)(主机到查询>)-s(客户端ip)-m 32

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


  • 我是dnspython clientsubnet的开发/维护人员。它被设计用于代码中作为dnspython的添加剂。我刚刚发布了2.0.0版(在尝试做你想做的事情之后),这使一切变得更加简单

  • pip安装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])
    
  • 使用
    消息
    进行查询:

    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的,而不是因为您必须这样使用它