dnspythonというモジュールの使い方を調べている際に下記のようにfor文を使ってresponseを表示していて素朴な疑問が湧いたのでメモ。
タイトルの結論としては、一般的なプライマリDNS、セカンダリDNSを設定したときと同じような動作の「いずれかから返ってきたらよかろうなのだ」理論で、もし全部から返ってこなくても何度か問い合わせてくれる様子。
ただしSERVFAILというコードが返ってきた場合は再試行対象から外す模様。
以下実験のきっかけ
pythonでdigるための一部
resolver = dns.resolver.Resolver()
resolver.nameservers = [socket.gethostbyname(nameserver)]
for rdata in resolver.query('www.yahoo.com', 'A'):
print rdata
短絡的にこう考えてしまった。
- nameserversに複数入れたらresponseが複数になる? ←願望
しかしながら冷静に考えると
- query結果は複数ある場合があり、それらを表示するため。
どっちがどうなのか分からなかったので試してみた&ソースも読んでみたところ動作的には
- nameserversは一般的なプライマリDNS、セカンダリDNSを設定したときと同じような動作
- 問い合わせ対象typeの結果が複数存在した場合はrdataに複数入ってくる
というDNSの挙動としては至極真っ当な結果でした。(そうだよな、今考えたらdefaultは既定のDNSの設定なんだし)
以下余談。
なぜ上のような願望があったかというと、特定のゾーンを設定したRoute53のDNSサーバ全てに対して本当にゾーンが設定されているのか確認する必要があり、for文入れたくなさのあまりの思考でした。