如何在一次 DNS 查询中获取多条记录

How to get multiple records in one DNS query

这个简单的代码片段使用 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

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

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

我认为没有 "any" 选项。这可能是因为 DNS 反射攻击和通过 UDP 的 DNS 查询的安全隐患。可能最好使用如下 'types' 这样的列表:

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('whosebug.com')

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