やりたいこと
- Rubyで、自分のマシンのグローバルIPアドレスを取得する
やり方
- 必要な標準ライブラリは
resolv
- ip_addr_strにグローバルIPが手に入る(型は文字列型)
require 'resolv'
ip_addr_str = Resolv::DNS.new(:nameserver=>'ns1.google.com').getresources("o-o.myaddr.l.google.com", Resolv::DNS::Resource::IN::TXT)[0].strings[0]
# => "62.513.271.281"
動機と経緯
グローバルIPを知りたくなることは、たまにあり、今までcurl
でグローバルIPを教えてくれるサイトを使って、手に入れていました。
だけど、これだとサーバーが落ちていたり、サーバーがサービスを終了したりして、困っていました。dig
コマンドでGoogleのDNS(?ちゃんと理解していません)でグローバルIPが手に入ることを知り、いままでよりGoogleなら安定的に入手できそうで、いい感じだったので、それをRubyでできないか探して、見つけた感じです。
参考になったところ一覧
- nslookupでグローバルIPを調べる方法 - https://code.blogs.iiidefix.net/posts/get-public-ip-using-dns/
- Rubyのresolvライブラリ - https://docs.ruby-lang.org/ja/latest/library/resolv.html
- RubyのresolvライブラリのDNSクラス - https://docs.ruby-lang.org/ja/latest/class/Resolv=3a=3aDNS.html
- 実際のグローバルIPを確認できるサイト - https://www.cman.jp/network/support/go_access.cgi