【问题标题】:How to get multiple records in one DNS query如何在一次 DNS 查询中获取多条记录
【发布时间】:2018-04-11 05:22:34
【问题描述】:

这个简单的代码 sn-p 使用 dnspython 代码将名称解析为 IP。

在这个example 中,域是google.com 和A 记录的答案。如何在一个查询中获取多条记录(例如 TXT、CNAME、..)?

from dns.resolver import dns

myResolver = dns.resolver.Resolver() #create a new instance named 'myResolver'
myAnswers = myResolver.query("google.com", "A") #Lookup the 'A' record(s) for google.com
for rdata in myAnswers: #for each response
    print (rdata) #print the data

【问题讨论】:

    标签: python sockets dns dnspython


    【解决方案1】:

    我认为没有“任何”选项。这可能是因为 DNS 反射攻击和基于 UDP 的 DNS 查询的安全隐患。可能最好使用下面的“类型”之类的列表:

    import dns.resolver
    
    def get_domain():
        types=[
            'A',
            'TXT',
            'CNAME',
            'NS',
        ]
        for type in types:
            try: 
                reponse = dns.resolver.query('domain.com', type)
                for data in response:
                    print (type, "-", data.to_text())
                except Exception as err:
                    print(err)
    
    if __name__ == '__main__':
        get_domain('stackoverflow.com')
    

    由于 DNS 反射 DDoS 攻击的激增,现在围绕 DNS 查询有很多安全措施,因此您可能希望对代码进行速率限制。特别是如果您针对多个域运行此操作

    【讨论】:

    • 你可以在没有ANY记录类型的情况下进行DNS反射攻击。它的使用将在未来被弃用,因为它的语义并不是人们所期望的(它不是域的 AXFR 的子集)
    【解决方案2】:

    你不能。查看code,尤其是query() 函数中的参数rdtype。

    first = myResolver.query("google.com", "A")
    second = myResolver.query("google.com", "MX")
    third = myResolver.query("google.com", "NS")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多