ウェブのアクセスログを解析する中で、IP アドレスのホスト名への変換が必要となったので、Socket.gethostbyaddr を使ってみました。
$ irb
>> require 'socket'
=> true
>> ip = "17.149.160.40"
=> "17.149.160.40"
>> addr = ip.split('.').map {|x| x.to_i}.pack('C4') # '.' 区切りで分解し、それぞれを1バイトに変換
=> "\021\225\240("
>> host = Socket.gethostbyaddr(adds) # ホスト名などが返ってくる
=> ["www.apple.co.jp", ["40.160.149.17.in-addr.arpa"], 2, "\021\225\240("]
>> host = Socket.gethostbyaddr(addr).first # 最初がホスト名
=> "www.apple.co.jp"
>>
確認バージョン
- ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
- irb 0.9.5(05/04/13)