6

単一のドメイン名のすべてのDNSレコードを解析するための高速スクリプトを作成しようとしています。'ANY'コマンドでうまくいくようですが、TTLに奇妙な問題があります。このようなものを使用する場合

domain = dns.name.from_text(domain)
nameserver = '127.0.0.1'
query = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.udp(query, nameserver, timeout = 2)
print response

返されたデータは私が必要とするものですが、TTLが期限切れになると、スクリプトは期限切れのレコードを返さないだけです。'DIGdomainANY'コマンドにもこの問題があるようです。

だから私の質問は、単一のドメインのすべてのDNSレコードを取得するための最速の方法は何ですか?

4

1 に答える 1

6

ANYクエリのTTLの問題は、DNSプロトコルに固有のものです。キャッシュに特定の名前のRRtypeが1つあると、ANYクエリに応答してキャッシュが持っているものを返し、ソースにクエリを実行してそれ以上あるかどうかを確認しません。RFC 2181には、これに関する短い議論があります。

5.2。RRSet内のRRのTTL

リソースレコードには、存続時間(TTL)もあります。RRSet内のRRが異なるTTLを持つ可能性があります。他の方法でよりよく達成することができないこれの使用法は発見されていません。ただし、これにより、キャッシングサーバーからの部分的な応答(「切り捨て」とマークされていない)が発生する可能性があります。この場合、RRSet内のすべてではないが一部のRRのTTLが期限切れになります。

異なるTTLを持つRRsetにRRを含めることが推奨されていないということは実際にはありませんが、作成者は明らかにこれを行うことを高く考えていませんでした。

つまり、簡単に言うと、ANYがうまく機能しない場合、関心のあるRRタイプごとに1つのクエリを発行する以外に解決策はありません。これらすべてのクエリを並行して実行することで時間を節約できます(ただし、Pythonライブラリではおそらくこれは簡単ではありません)。

于 2013-03-25T10:29:03.283 に答える