我使用DNS Python
从Python程序中获取DNS记录我可以获得各种与DNSSEC相关的记录:
>>> import dns.resolver
>>> myresolver = dns.resolver.Resolver()
>>> myresolver.use_edns(1, 0, 1400)
>>> print myresolver.query('sources.org', 'DNSKEY')
<dns.resolver.Answer object at 0xb78ed78c>
>>> print myresolver.query('ripe.net', 'NSEC')
<dns.resolver.Answer object at 0x8271c0c>
但没有RRSIG记录:
>>> print myresolver.query('sources.org', 'RRSIG')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 664, in query
answer = Answer(qname, rdtype, rdclass, response)
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 121, in __init__
raise NoAnswer
我尝试过几个像absolight.fr或ripe.net这样的签名域名。
尝试挖掘,我发现确实存在RRSIG记录。
使用tcpdump检查,我可以看到DNS Python正确发送 查询并收到正确的回复(此处为8条记录):
16:09:39.342532 IP 192.134.4.69.53381 > 192.134.4.162.53: 22330+ [1au] RRSIG? sources.org. (40)
16:09:39.343229 IP 192.134.4.162.53 > 192.134.4.69.53381: 22330 8/5/6 RRSIG[|domain]
DNS Python 1.6.0 - Python 2.5.2(r252:60911,2008年8月8日,09:22:44) linux2上的[GCC 4.3.1]
答案 0 :(得分:3)
你可能意味着RRSIG ANY(否则,顺序错误,类需要在类型之后)
>>> print myresolver.query('sources.org', 'RRSIG', 'ANY')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 664, in query
answer = Answer(qname, rdtype, rdclass, response)
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 121, in __init__
raise NoAnswer
dns.resolver.NoAnswer
答案 1 :(得分:0)
如果你试试这个,会发生什么?
print myresolver.query('sources.org', 'ANY', 'RRSIG')
答案 2 :(得分:0)
这看起来像Python DNS库中的一个可能的错误,虽然我没有很好地阅读Python来找到它。
请注意,在任何情况下,您的EDNS0缓冲区大小参数都不足以处理sources.org的RRSIG记录,因此您的客户端和服务器必须故障转移到TCP / IP。
答案 3 :(得分:0)
您可能希望使用raise_on_no_answer=False
,您将得到正确的回复:
resolver.query(hostname, dnsrecord, raise_on_no_answer=False)
答案 4 :(得分:0)
RRSIG不是记录,它是有效DNS记录的哈希摘要。您可以查询DNSKEY记录,设置want_dnssec = True并获取DNSKEY记录,以及DNSKEY记录的&#34; RRSIG&#34;。
更一般地说,RRSIG只是有效记录的签名(例如DS记录)。
所以当你问服务器时
myresolver.query('sources.org', 'RRSIG')
它不知道你要求什么。 RRSIG本身没有意义,你需要指定 RRSIG是什么?