DNS解析程序不包含答案

2024-06-08 01:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python自动化一些任务。如果某些域仍在我们的DNS服务器中,我必须检查。所以在堆栈中搜索时,我找到了带有dns.resolver的脚本,并试图使其适合我的需要。 因此,脚本如下所示:

import socket
import dns.resolver


mylist=[]
with open('domainfile.txt') as file:
    for line in file:
        mylist.append(line)
length = len(mylist)


resolver = dns.resolver.Resolver()
resolver.nameservers=[socket.gethostbyname('dns.example.com')]

for i in range(length):
    for rdata in resolver.query(mylist[i], 'CNAME') :
        print(rdata.target)

我的domainfile.txt看起来像这样:

domain1
domain2
domain3
[...]

我收到的错误消息是:

Traceback (most recent call last): File "dnspython.py", line 20, in for rdata in resolver.query(lista[i], 'CNAME') : File "/usr/local/lib/python3.7/dist-packages/dns/resolver.py", line 1053, in query raise_on_no_answer) File "/usr/local/lib/python3.7/dist-packages/dns/resolver.py", line 236, in init raise NoAnswer(response=response) dns.resolver.NoAnswer: The DNS response does not contain an answer to the question: domain1\010.example.com. IN CNAME

如果我只是在If语句中插入我的域,而不是遍历mylist我就得到了我所需要的。但是,当我试图通过列表执行此操作时,它将添加到我的域\010,然后什么也没有发生。 你能帮我吗? 谢谢


Tags: inpyimport脚本fordnsresponseline
1条回答
网友
1楼 · 发布于 2024-06-08 01:59:34

根据文件,这似乎是意料之中的:http://www.dnspython.org/docs/1.14.0/dns.resolver.Resolver-class.html#query

Raises:

...

  • NoAnswer - the response did not contain an answer and raise_on_no_answer is True.

发生这种情况的原因可能是因为您没有从域中删除行尾


我会这样做的

import socket
import dns.resolver


with open('domainlist.txt') as f:
    my_list = [line.strip() for line in f.readlines()]

resolver = dns.resolver.Resolver()
resolver.nameservers=[socket.gethostbyname('dns.example.com')]

for domain in my_list:
    try:
        q = resolver.query(domain, 'CNAME')
        for rdata in q:
            print(f'{domain}: {rdata.target}')
    except dns.resolver.NoAnswer:
        print(f'{domain}: No answer')

相关问题 更多 >

    热门问题