重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Ubuntu 11.04でruby1.8.7を使用しています。
rubyで自分のIPアドレスを取得したいのですがいい方法を見つけられません。
ifconfig -aではeth0のinet addrとして192.168.153.129が見えており、これを取得したいのです。

ネットで調べた
IPSocket::getaddress(Socket::gethostname)

Socket.getaddrinfo(Socket::gethostname, nil, Socket::AF_INET)[0][3]
は、/etc/hostsに
「IP(192.168.153.129)」 「ホスト名」
を追加しておかないとうまくいかないようです(追加すればうまくいきます)。

/etc/hostsにはubuntuインストールのデフォルトとして
「IP(127.0.1.1)」 「ホスト名」
が記載されており、このままではうまくいかないようなのです。自分の環境だけであれば/etc/hostsを変更すればよいのですが、rubyプログラムを配布して別のホストで動かす際に、/etc/hostsの変更を依頼しなければいけないのがいやがられそうです。

/etc/hostsの変更なしに、自分のIPアドレスを取得するよい方法はないでしょうか。

A 回答 (2件)

Rubyは全くの初心者ですけど、やっつけ仕事でいいならこれでどうですか。



#!/usr/bin/ruby
`ifconfig eth0` =~ /inet ([\d\.]+)/;
printf("%s\n", $1)
    • good
    • 1
この回答へのお礼

なるほど。
外部コマンドの出力を利用するのですね。
試したところうまくいきそうです。
ありがとうございます。

お礼日時:2013/03/09 21:34

そもそもIPアドレスは、ネットワークインタフェースに紐づくものなので、何をもって「自分のIPアドレス」とするかを明確化したほうがよいと思います。



一覧を取得するなら、回答No.1さんが書かれているように、ifconfigの出力を整形するのが一番手っ取り早いかと。

あるいは外部と通信するためのIPアドレスを指定したいということなら、デフォルトゲートウェイにつながるインタフェースを判別し、そのIPアドレスを取得するとか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分が外部PCからアクセスされる際に使用するIPアドレスを取得したかったのです。
ifconfigの整形でうまくいきそうです。
rubyのSocketのAPIで何かいい手があるのではないかと思っていましたが、このようなIPアドレスを取得するというのは簡単そうで意外と難しいのですね。

お礼日時:2013/03/09 21:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!