グローバルIPアドレスの調べ方


端末へのIPアドレス「192.168.XXX.XXX」であれば、ifconfigやipconfigなどのコマンドで調べられるが、プロバイダから割り振られるIPアドレスをどう調べたらいいのか考えたことがあった。この悩みがでる時点でルータ相当の機器があるということなので、ルータの設定画面等で調べることができる。

ルータの設定画面からグローバルIPを調べる

NEC Aterm WR8170Nの場合の方法。

  1. http://web.setup/」あるいは「http://<<ルータのIPアドレス>>/」を開く
  2. ユーザ名・パスワードを求められるので、ユーザ名に「admin」、パスワードに設定した値を入力する
  3. 左側メニューから「情報」->「現在の状態」を開く
  4. 「接続先1[接続先1]状態」にある「WAN側IPアドレス」を見ればOK(もし表示されていなければ、画面右上にある「拡張表示」をクリックする)

NEC製ルータは概ねこの手順で調べられる。他社製ルータであっても似たような状態確認画面があるはず。

自前でスクリプトを用意して調べる

スクリプト等で自分の環境のグローバルIPを取得したい、といったときにルータの設定画面を開いて……、という確認方法はちょっと辛い。レンタルサーバ等を利用しているなら、自分のサイトに接続したユーザのIPを返すスクリプトを置いておけばいいと思う。

PHPであればこんな感じのスクリプトを「外部」のWebサーバ等へ置いておく。

<?php echo getenv("REMOTE_ADDR"); ?>

wgetでこのスクリプトへアクセスして結果を取得できる。

$ wget -q -O - http://hogehoge.com/getipaddress.php

シェルスクリプトで取得したIPを使いたければ、次のように変数へ格納すればいい。

GLOBAL_IP=`wget -q -O - http://hogehoge.com/getipaddress.php`
echo ${GLOBAL_IP}

トリビュート

公開されているスクリプトを使用して調べる

前述したようなスクリプトを公開しているサイトはけっこうある。たとえば僕が使っているDDNSサービス(無料)でも用意されている。

http://info.ddo.jp/remote_addr.php」へアクセスすると、自分のIPアドレスが表示される。

REMOTE_ADDR:59.156.XXX.XXX

ただし、手前についている文字列を取り除かないとIPアドレスとして使えないので、wgetで得た結果にcutを組み合わせる。

$ wget -q -O - http://info.ddo.jp/remote_addr.php|cut -c 13-

これでIPアドレスだけ取得できるようになる。

DDNS更新を自動化するスクリプト

以下はDynamic DO!.jpというダイナミックDNSを提供しているサイトでのIPアドレス更新するためのスクリプト。CentOS5.7で動かしているけど、UNIX/Linuxならなんでも動くと思う。

#!/bin/sh
USER=username
PASS=password
LOG=~/logs/ddnsupdate/`date "+%Y%m%d%H%M%S"`.log
IP=`wget -q http://info.ddo.jp/remote_addr.php -O -|cut -c 13-`
wget -q -O ${LOG} http://free.ddo.jp/dnsupdate.php?dn=${USER}&ip=${IP}&pw=${PASS}

このサイトはGETリクエストでIP更新できるようだったのでこれでOK。自宅サーバのcronで3時間置きに実行させている。
ダイナミックDNSサービスを提供するサイトの多くは、Webサイト上での手動更新のほかにいくつかの方法を用意していることがあるし、わざわざIPを自分で取得しなくてもいい場合もけっこうある。