動かざることバグの如し

近づきたいよ 君の理想に

RubyでIPからリモートホストを取得するとSocketだと怒られる件

環境

RubyでIPからリモートホストを取得したい

以下は、Rubyを使用してIPアドレスからリモートホスト名を取得する方法についての情報です。

例えば、133.159.148.245から245.148.159.133.rev.vmobile.jpを取得することができます。

以前はSocketライブラリを使用していましたが、現在は非推奨となっています。そのため、新たにAddrinfoライブラリを使用する方法をメモしておきます。

コード

require 'socket'

ip = '133.159.148.245'
hostname = Socket.gethostbyaddr(ip.split('.').map(&:to_i).pack('C*'))[0]
p hostname

ただこれだと実行時に以下のような非推奨WARNINGが表示される。rubocopでも怒られる。

a.rb:9: warning: Socket.gethostbyaddr is deprecated; use Addrinfo#getnameinfo instead.

そこでAddrinfoライブラリを使ったバージョンに変える。

require 'socket'

ip = '133.159.148.245'
addr_info = Addrinfo.tcp(ip, 0)
p addr_info.getnameinfo[0]