Ruby 1.8.5 で、IPアドレスのSOAを求める方法ですが、IPアドレスではうまくいかないようでした。一度やってうまくいったことがあったような気がしてばっちりと思ってしまったようです。良い方法があったら教えてください。

require 'resolv'
#p Resolv::DNS.new.getresources("ruby-lang.org", Resolv::DNS::Resource::IN::ANY)
p Resolv::DNS.new.getresources("221.186.184.68", Resolv::DNS::Resource::IN::ANY)

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2012/02/21 13:23:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント100pt

そもそも、

IPアドレスのSOA

って、何ですか?

ある IP アドレスの逆引きゾーンの SOA、という意味であれば、"221.186.184.68" ではなく、"184.186.221.in-addr.arpa" の SOA を取得することになります。
@IT:DNS Tips:逆引きの設定方法とは

ただ、逆引きゾーンの場合、CNAME が設定されていることが多いので、一度、PTR レコードなりを取得して、CNAME があれば、そっちを使って、逆引きゾーンの名称を決定する必要があると思います。

実際、68.184.186.221.in-addr.arpa の PTR レコードは、CNAME が 68.64.184.186.221.in-addr.arpa となっているので、64.184.186.221.in-addr.arpa に対する SOA、ということになるかと思います。

そうではなくて、この IP アドレスの持ち主となるドメインの SOA を求めるのであれば、逆引き結果からドメイン名を取り出して、どのドメイン名に対する SOA を求める、ということになります。

require 'resolv'

domain = Resolv.new.getname("221.186.184.68").slice(/^[^.]+\.(.*)/, 1)
p Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::ANY)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません