人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

wwwサービス(apache2)を起動しています。
自サーバのグローバルIPを「正しく」検出して表示する方法を教えてください。
PHP または Perl でお願いします。

注意:訪問者のIPではありません。

●質問者: のの
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:IP Perl PHP WWW グローバルIP
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● ココサブ
●8ポイント

PHPならこれで表示されます。

<html>

<head><title>IP</title></head>

<body>

echo $_SERVER["SERVER_ADDR"];

?>

</body>

</html>

◎質問者からの返答

グローバルIP を取りたいのですが・・・


2 ● orz
●8ポイント

通常はSERVER_ADDRという環境変数に入っています。

NATやproxyなどを経由して、プライベートアドレスしか持たないサーバにアクセスが来た場合ですが、これはケースバイケースになります。proxyなら別名の環境変数に値を入れてくれる場合もあるでしょう。ほとんどの場合はSERVER_NAMEにアクセスされたホスト名は入っているので、この名前をインターネット領域の(またはクライアントが見ているはずのDNSと同じレコードを返すであろう)DNSで解決することで、クライアントから見えるIPアドレスを知ることができると思います。

SERVER_NAME サーバ名

SERVER_ADDR サーバのIPアドレス

SERVER_PORT サーバのport番号

perlなら$ENV{"環境変数名"}という連想配列で、phpならapache_getenvという関数でも取得できるようです。

http://php.s3.to/man/function.apache-getenv.html

◎質問者からの返答

さらに具体的にお願いします。


3 ● ootatmt
●15ポイント

perl で次のようにすればグローバルIPが取得できます。

($IP)= `/usr/bin/lynx -dump http://checkip.dyndns.org` =~ /Current IP Address\: (.*)/;


※ サーバに lynx がインストールされている必要があります。

lynx のパスは適宜変更してください。

◎質問者からの返答

なるほど。ありがとうございます。

しかしlynxを入れたくありません・・・


4 ● ootatmt
●200ポイント ベストアンサー

では、モジュールを使って以下のようにしてください。

use HTTP::Lite;

my $http = new HTTP::Lite;

my $req = $http->request("http://checkip.dyndns.org/") or die "Unable to get document: $!";

my ($IP) = $http->body() =~ /Current IP Address: (.*)<\/body>/;

HTTP::Liteモジュールは以下の場所からダウンロードして適当なディレクトリに置くだけで使えます。

http://search.cpan.org/src/RHOOPER/HTTP-Lite-2.1.6/Lite.pm

実行ファイルと同じディレクトリにHTTPディレクトリを作って、その中に Lite.pm を置けばいいでしょう。

◎質問者からの返答

なんと!dynDNSにこんなサービスが!

最高です。実現できました。

どんぴしゃです。有難うございました。


5 ● ココサブ
●8ポイント

これだったらどうですかね。

www.example.comのところを自サーバのアドレスに変更して使用ください。


<html>

<head><title>IP</title></head>

<body>

$ip = gethostbyname('www.example.com');

echo $ip;

</body>

</html>


http://jp.php.net/manual/ja/function.gethostbyname.phpより

◎質問者からの返答

そのサイトで言う失敗のレスポンスが返ってきます・・・うーん

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ