LoginSignup
0
0

More than 5 years have passed since last update.

Rubyのresolvライブラリで `dig +short` を代替

Last updated at Posted at 2018-09-07

ネームサーバーの動作確認をするのに dig コマンドを使って問い合わせを試していたが、Rubyでスクリプト化する際にコマンド呼び出しではなくRubyのライブラリでできないかと思い、方法を調べた。

dig +short のように結果のみでいいのならば、標準ライブラリの resolv で代替できそう。

bash
dig  @8.8.8.8  +short +time=1 +tries=3  google.co.jp. any
dig  @8.8.8.8  +short +time=1 +tries=3  google.co.jp.
dig  @8.8.8.8  +short +time=1 +tries=3  -x 8.8.4.4

ruby
require 'resolv'

Resolv::DNS.open(nameserver: "8.8.8.8") do |dns|   # ブロックなら DNS#close を自動でする
    dns.timeouts = [1, 1, 1]   # リトライ毎にタイムアウトを変えられる
    p dns.getresources("google.co.jp.", Resolv::DNS::Resource::IN::ANY)
    p dns.getaddresses("google.co.jp.")
    p dns.getnames("8.8.4.4")
    nil   # ブロックの戻り値、今回は明示的に空にしておく
end

結果を得るメソッドは、 resource, address, name それぞれに3種類ある。

  • getXXXs は全ての結果を配列で返す(見つけられなければ空配列)
  • getXXX は最初の結果のみを返す(見つけられなければ例外 Resolv::ResolvError 発生)
  • each_XXX は全ての結果をイテレーションできる

参考:Rubyリファレンスマニュアル resolvライブラリ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0