wwwサービス(apache2)を起動しています。

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

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

回答の条件
  • 1人2回まで
  • 登録:2006/07/15 15:12:50
  • 終了:2006/07/15 22:35:53

ベストアンサー

id:ootatmt No.4

ootatmt回答回数1307ベストアンサー獲得回数652006/07/15 19:03:56

ポイント200pt

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

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 を置けばいいでしょう。

id:s_mitsuki

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

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

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

2006/07/15 22:33:58

その他の回答(4件)

id:YasuyukiMiura No.1

ココサブ回答回数33ベストアンサー獲得回数72006/07/15 17:17:05

ポイント8pt

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

<html>

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

<body>

echo $_SERVER["SERVER_ADDR"];

?>

</body>

</html>

id:s_mitsuki

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

2006/07/15 18:38:11
id:orz_horie No.2

orz回答回数21ベストアンサー獲得回数52006/07/15 17:21:57

ポイント8pt

通常は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

id:s_mitsuki

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

2006/07/15 18:50:26
id:ootatmt No.3

ootatmt回答回数1307ベストアンサー獲得回数652006/07/15 17:50:02

ポイント15pt

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

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


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

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

id:s_mitsuki

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

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

2006/07/15 18:49:51
id:ootatmt No.4

ootatmt回答回数1307ベストアンサー獲得回数652006/07/15 19:03:56ここでベストアンサー

ポイント200pt

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

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 を置けばいいでしょう。

id:s_mitsuki

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

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

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

2006/07/15 22:33:58
id:YasuyukiMiura No.5

ココサブ回答回数33ベストアンサー獲得回数72006/07/15 19:04:35

ポイント8pt

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

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より

id:s_mitsuki

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

2006/07/15 19:23:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません