自サーバのグローバルIPを「正しく」検出して表示する方法を教えてください。
PHP または Perl でお願いします。
注意:訪問者のIPではありません。
では、モジュールを使って以下のようにしてください。
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 を置けばいいでしょう。
PHPならこれで表示されます。
<html>
<head><title>IP</title></head>
<body>
echo $_SERVER["SERVER_ADDR"];
?>
</body>
</html>
グローバルIP を取りたいのですが・・・
通常はSERVER_ADDRという環境変数に入っています。
NATやproxyなどを経由して、プライベートアドレスしか持たないサーバにアクセスが来た場合ですが、これはケースバイケースになります。proxyなら別名の環境変数に値を入れてくれる場合もあるでしょう。ほとんどの場合はSERVER_NAMEにアクセスされたホスト名は入っているので、この名前をインターネット領域の(またはクライアントが見ているはずのDNSと同じレコードを返すであろう)DNSで解決することで、クライアントから見えるIPアドレスを知ることができると思います。
SERVER_NAME サーバ名
SERVER_ADDR サーバのIPアドレス
SERVER_PORT サーバのport番号
perlなら$ENV{"環境変数名"}という連想配列で、phpならapache_getenvという関数でも取得できるようです。
さらに具体的にお願いします。
perl で次のようにすればグローバルIPが取得できます。
($IP)= `/usr/bin/lynx -dump http://checkip.dyndns.org` =~ /Current IP Address\: (.*)/;
※ サーバに lynx がインストールされている必要があります。
lynx のパスは適宜変更してください。
なるほど。ありがとうございます。
しかしlynxを入れたくありません・・・
では、モジュールを使って以下のようにしてください。
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にこんなサービスが!
最高です。実現できました。
どんぴしゃです。有難うございました。
これだったらどうですかね。
www.example.comのところを自サーバのアドレスに変更して使用ください。
<html>
<head><title>IP</title></head>
<body>
$ip = gethostbyname('www.example.com');
echo $ip;
</body>
</html>
そのサイトで言う失敗のレスポンスが返ってきます・・・うーん
なんと!dynDNSにこんなサービスが!
最高です。実現できました。
どんぴしゃです。有難うございました。