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
タイトルとURLをコピーしました