Python + DNS:无法获取RRSIG记录:否答案
时间:2020-03-05 18:58:43 来源:igfitidea点击:
我使用DNS从Python程序获取DNS记录
Python
我可以获得各种与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或者mature.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]
解决方案
回答
如果我们尝试这样做,会发生什么?
print myresolver.query('sources.org', 'ANY', 'RRSIG')
回答
我们可能是说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
回答
这看起来像是Python DNS库中的一个可能的错误,尽管我对Python的理解不够深。
请注意,在任何情况下,EDNS0缓冲区大小参数都不足以处理sources.org的RRSIG记录,因此客户端和服务器将必须故障转移到TCP / IP。