環境
- Ruby 3.2
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]