どうして自分のIPアドレスを知る必要があるんでしょうね。私もその人と同じことを考えているのかもしれないし、私と同じことが必要な人も今後いるかもしれないですね。うふ。
ググって調べたところ、私がこれまで知らなかった画期的な方法で自分のIPアドレスを取得する方法を見つけている人を見つけました。
自分のIPアドレスを得る
http://d.hatena.ne.jp/NeoCat/20070721/1184994948
その人はperlで実装していたのですが、それをrubyに移植しました。どこでもうまくいくみたいです。驚きました。
my_address.rb
# 自分のIPアドレスを得る
# http://d.hatena.ne.jp/NeoCat/20070721/1184994948
# このperlソースをRubyに移植
# ダミーのUDPソケットを作り、それを相手ホストにconnect()し、
# getsockname()で自分のアドレスを得る。connectのMANPAGEによると、
# UDPソケットをconnectすると、特に何もパケットが送出されることはなく、
# そのソケットのデフォルトのパケット送信先/唯一の受信先となる、
# という仕様があるのだそうだ。
require 'socket'
def my_address
udp = UDPSocket.new
# クラスBの先頭アドレス,echoポート 実際にはパケットは送信されない。
udp.connect("128.0.0.0", 7)
adrs = Socket.unpack_sockaddr_in(udp.getsockname)[1]
udp.close
adrs
end
p my_address
実行結果 (Windows 7)
C:>ruby --version
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]
C:>ruby my_address.rb
"10.0.1.7"
実行結果 (MacOS 10.9.4)
$ ruby --version
ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
$ ruby my_address.rb
"10.0.1.6"