[ruby-list:50690] Re: Fwd: Resolv::DNSのMXレコード取得について
From:
Masanori Tanaka <yuui.tanaka@...>
Date:
2018-07-27 03:52:27 UTC
List:
ruby-list #50690
こんにちは。田中と申します。
調べたところ、以下のコードで /[^\.]+/ という正規表現で split されているので、
bear..so-net.ne.jp は bear, so-net, ne, jp という要素に分解されたあとに
DNS に問い合わせに行くがために、そのような結果になるようです。
module Label # :nodoc:
def self.split(arg)
labels = []
arg.scan(/[^\.]+/) {labels << Str.new($&)}
return labels
end
https://github.com/ruby/ruby/blame/v2_3_3/lib/resolv.rb#L1173
/[^\.]+/ を /[^\.]/ にすることで解決すると思いますが、
このような正規表現になっている経緯は私も興味があります。
どなたかご存知の方はいらっしゃいますか?
2018年7月27日(金) 11:35 wataru koyama <koyama777wataru@gmail.com>:
> お世話になっております。小山渉です。
> 私の勘違いにより、間違ったサンプルのドメインを提示してしまいましたので、
> 再度送信いたします。
>
> 下記のように、ドットが2つ続かなければ存在するようなドメインにて、起きた現象でした。
> bear..so-net.ne.jp
> kitten..so-net.ne.jp etc
>
> 上記のメールアドレスを用いて
> records = Resolv::DNS.open do |dns|
> dns.timeouts = 1
> records = dns.getresources('bear..so-net.ne.jp ',
> Resolv::DNS::Resource::IN::MX)
> end
>
> p records #=> 値が返ってくる
>
>
> そして同様の確認をnslookupコマンドにて行うとMXレコードが取れないと判定されます。
> nslookup
> > set q=MX
> > bear..so-net.ne.jp
>
> 以上です。失礼いたします。
>
> ---------- Forwarded message ---------
> From: wataru koyama <koyama777wataru@gmail.com>
> Date: 2018年7月26日(木) 14:35
> Subject: Resolv::DNSのMXレコード取得について
> To: <ruby-list@ruby-lang.org>
>
>
> はじめまして。小山渉です。
>
>
> Resolv::DNSのMXレコード取得についてについて質問させてください。
> MXレコードが取得できる場合に正常なメールドメインと判定しようと下記のようなコードを記載しました。
> コードの意図としては
> *recordsが空なら 不正なメールドメイン
> *recordsに何か入っていれば 正常なメールドメイン
> という感じです。
>
> ただ、'hoge..gmail.com'のような不正なドットが続くタイプで行うとMXレコードが取得でき、正常なものと判定されてしまいました。
>
>
> records = Resolv::DNS.open do |dns|
> dns.timeouts = 1
> records = dns.getresources('hoge..gmail.com',
> Resolv::DNS::Resource::IN::MX)
> end
>
>
> p records #=> 値が返ってくる
>
>
> そして同様の確認をnslookupコマンドにて行うとMXレコードが取れないと判定されます。
> nslookup
> > set q=MX
> > hoge..gmail.com
>
>
> 私のResolv::DNSの使い方が間違っているのか、もし違う方法にて、hoge..gmail.com
> をMXレコードが存在しないものと判定できる方法がありましたら、
> ご教授いただけると幸いです。
>
>
> 環境はcentos 6.9
> ruby 2.3.3p222
>
>
> 以上です。失礼いたします。
>
>