主に以下のページを参考にして。
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