43
41

More than 5 years have passed since last update.

[Ruby] 自分のIPアドレスを知る。

Last updated at Posted at 2014-08-28

どうして自分の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"
43
41
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
41