为什么 dnspython 给我这个错误?
Why is dnspython giving me this error?
这是我的简单代码:
print host
for rdata in dns.resolver.query(host, 'CNAME') :
prod_host = str(rdata.target)
我正在从文件中提取 host
。当我 运行 这个时,我得到以下信息:
"www.maizena.es"
Traceback (most recent call last):
File "lexparse.py", line 488, in <module>
dfs(rules_tree)
File "lexparse.py", line 486, in dfs
dfs(child)
File "lexparse.py", line 486, in dfs
dfs(child)
File "lexparse.py", line 471, in dfs
for rdata in dns.resolver.query(host, 'CNAME') :
File "build/bdist.macosx-10.11-intel/egg/dns/resolver.py", line 1132, in query
File "build/bdist.macosx-10.11-intel/egg/dns/resolver.py", line 1051, in query
dns.resolver.NXDOMAIN: None of DNS query names exist: \"www.maizena.es\"., \"www.maizena.es\".masked.domain.com., \"www.maizena.es\".domain.com., \"www.maizena.es\".netarch.domain.com., \"www.maizena.es\".fr.adsvc., \"www.maizena.es\".domainlab.com.
奇怪的是,当我 运行 在 python repl 中进行测试时,它似乎按预期工作:
bos-mpqpu:config_parse rabdelaz$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns.resolver
>>> for rdata in dns.resolver.query("www.maizena.es", 'CNAME') :
... prod_host = str(rdata.target)
...
>>> prod_host
'sana.kona.unilever.com.edgekey.net.'
此外,我的命令行中的 dns 解析工作得很好:
$ dig www.maizena.es
; <<>> DiG 9.8.3-P1 <<>> www.maizena.es
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15148
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.maizena.es. IN A
;; ANSWER SECTION:
www.maizena.es. 138 IN CNAME sana.kona.unilever.com.edgekey.net.
sana.kona.unilever.com.edgekey.net. 154 IN CNAME e10923.x.akamaiedge.net.
e10923.x.akamaiedge.net. 20 IN A 96.6.167.93
;; Query time: 73 msec
;; SERVER: 172.27.112.15#53(172.27.112.15)
;; WHEN: Tue Jul 25 11:24:11 2017
;; MSG SIZE rcvd: 130
任何见解表示赞赏。
这里的问题是字符串实际上嵌入了双引号。我需要把它们去掉。
注意:错误信息中\"www.maizena.es\"
。
我这样修改了我的脚本:
print repr(host)
for rdata in dns.resolver.query(host[1:-1], 'CNAME') :
prod_host = str(rdata.target)
使用 print repr()
帮助识别无关的双引号。
我遇到了同样的问题dns.resolver.NXDOMAIN: None of DNS query names exist:
,但它与多余的双引号无关。
因为这个问题是搜索引擎对此类错误的第一个回答,希望我的回答能对和我遇到同样问题的人有所帮助。
您可以尝试使用您当前的默认DNS服务器查询DNS记录。
它为我解决了这个问题。
打开下面的 cmd.exe 和 运行 命令:
ipconfig /all | findstr /R "DNS\ Servers"
C:\>ipconfig /all | findstr /R "DNS\ Servers"
DNS Servers . . . . . . . . . . . : 223.121.180.100
DNS Servers . . . . . . . . . . . : 223.121.180.101
获取第一个 DNS 服务器 IP 地址并将其设置为解析器的名称服务器,作为额外的名称服务器,您可以设置一个来自 Google 和一个来自 Cloudflare。
my_resolver = dns.resolver.Resolver(configure=False)
my_resolver.nameservers = ['223.121.180.100', '8.8.8.8', '1.1.1.1']
answer = my_resolver.query('google.com', 'A')
这是我的简单代码:
print host
for rdata in dns.resolver.query(host, 'CNAME') :
prod_host = str(rdata.target)
我正在从文件中提取 host
。当我 运行 这个时,我得到以下信息:
"www.maizena.es"
Traceback (most recent call last):
File "lexparse.py", line 488, in <module>
dfs(rules_tree)
File "lexparse.py", line 486, in dfs
dfs(child)
File "lexparse.py", line 486, in dfs
dfs(child)
File "lexparse.py", line 471, in dfs
for rdata in dns.resolver.query(host, 'CNAME') :
File "build/bdist.macosx-10.11-intel/egg/dns/resolver.py", line 1132, in query
File "build/bdist.macosx-10.11-intel/egg/dns/resolver.py", line 1051, in query
dns.resolver.NXDOMAIN: None of DNS query names exist: \"www.maizena.es\"., \"www.maizena.es\".masked.domain.com., \"www.maizena.es\".domain.com., \"www.maizena.es\".netarch.domain.com., \"www.maizena.es\".fr.adsvc., \"www.maizena.es\".domainlab.com.
奇怪的是,当我 运行 在 python repl 中进行测试时,它似乎按预期工作:
bos-mpqpu:config_parse rabdelaz$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns.resolver
>>> for rdata in dns.resolver.query("www.maizena.es", 'CNAME') :
... prod_host = str(rdata.target)
...
>>> prod_host
'sana.kona.unilever.com.edgekey.net.'
此外,我的命令行中的 dns 解析工作得很好:
$ dig www.maizena.es
; <<>> DiG 9.8.3-P1 <<>> www.maizena.es
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15148
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.maizena.es. IN A
;; ANSWER SECTION:
www.maizena.es. 138 IN CNAME sana.kona.unilever.com.edgekey.net.
sana.kona.unilever.com.edgekey.net. 154 IN CNAME e10923.x.akamaiedge.net.
e10923.x.akamaiedge.net. 20 IN A 96.6.167.93
;; Query time: 73 msec
;; SERVER: 172.27.112.15#53(172.27.112.15)
;; WHEN: Tue Jul 25 11:24:11 2017
;; MSG SIZE rcvd: 130
任何见解表示赞赏。
这里的问题是字符串实际上嵌入了双引号。我需要把它们去掉。
注意:错误信息中\"www.maizena.es\"
。
我这样修改了我的脚本:
print repr(host)
for rdata in dns.resolver.query(host[1:-1], 'CNAME') :
prod_host = str(rdata.target)
使用 print repr()
帮助识别无关的双引号。
我遇到了同样的问题dns.resolver.NXDOMAIN: None of DNS query names exist:
,但它与多余的双引号无关。
因为这个问题是搜索引擎对此类错误的第一个回答,希望我的回答能对和我遇到同样问题的人有所帮助。
您可以尝试使用您当前的默认DNS服务器查询DNS记录。 它为我解决了这个问题。
打开下面的 cmd.exe 和 运行 命令:
ipconfig /all | findstr /R "DNS\ Servers"
C:\>ipconfig /all | findstr /R "DNS\ Servers"
DNS Servers . . . . . . . . . . . : 223.121.180.100
DNS Servers . . . . . . . . . . . : 223.121.180.101
获取第一个 DNS 服务器 IP 地址并将其设置为解析器的名称服务器,作为额外的名称服务器,您可以设置一个来自 Google 和一个来自 Cloudflare。
my_resolver = dns.resolver.Resolver(configure=False)
my_resolver.nameservers = ['223.121.180.100', '8.8.8.8', '1.1.1.1']
answer = my_resolver.query('google.com', 'A')