3

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のようないくつかの署名されたドメインを試しました。

digを試してみると、確かに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]

4

5 に答える 5

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
于 2008-09-17T15:25:29.943 に答える
0

これはPythonDNSライブラリのバグのように見えますが、Pythonを十分に読んで見つけることができません。

いずれの場合も、EDNS0バッファサイズパラメータはsources.orgのRRSIGレコードを処理するのに十分な大きさではないため、クライアントとサーバーはTCP/IPにフェイルオーバーする必要があることに注意してください。

于 2008-09-22T13:42:59.810 に答える
0

これを試すと、どうなりますか?

print myresolver.query('sources.org', 'ANY', 'RRSIG')
于 2008-09-17T12:59:30.747 に答える