読者です 読者をやめる 読者になる 読者になる

Rubyでドメイン名からIPとサーバ名を引く

主に以下のページを参考にして。
http://www.geekpagh.jp/programming/ruby-network/gethostbyaddr.php

標準出力からドメイン名を流し込むと、対象のサーバのIPとサーバ名をタブ区切りで吐き出すだけのスクリプト

流し込む形式は、一行1ドメイン名。今回はファイルを流し込む
$ cat host.list
www.yahoo.co.jp
www.googlh.co.jp

実行は以下の様なイメージ。今回は標準入力から流し込んだが、ファイルだったらファイル名を指定してもよい
$ cat host.list | ruby resolvh.rb
www.yahoo.co.jp 124.83.147.212 f6.top.vip.ogk.yahoo.co.jp
www.googlh.co.jp 74.125.235.151 nrt19s11-in-f23.1e100.net

$ ruby resolvh.rb host.list
www.yahoo.co.jp 124.83.147.212 f6.top.vip.ogk.yahoo.co.jp
www.googlh.co.jp 74.125.235.151 nrt19s11-in-f23.1e100.net

実際のプログラムは以下の通り
$ cat resolvh.rb
# coding: utf-8
require "socket"

while host = gets  
    host = host.gsub(/[\r\n\s]/, "");

    name = ""  
    ip   = ""

    # この辺の正規表現は適当。  
    if host.match(/^[a-zA-Z0-9\-\.]+$/) then  
        begin  
            hostent = Socket.gethostbyname(host)

            ip      = hostent[3].unpack("C4").join('.')  
            name    = Socket.gethostbyaddr(hostent[3])[0]  
        rescue  
            # 例外処理も適当。基本何もしない  
        end

    end

    # タブ区切りで出力して、Flushしておく  
    print  host + "\t" + ip + "\t" + name  + "\n"  
    STDOUT.flush  
end