REMOTE_ADDRは、アクセス元のIPアドレスを表します。つまりあなたのホームページやCGIに対してアクセスした人がつかんでいるIPアドレスです。それに対してREMOTE_HOSTは、REMOTE_ADDRで取得したIPアドレスをDNSで逆引きしたホスト名をあらわします。
しかし、サーバによっては、REMOTE_HOSTを返さないものもあります。これはサーバの負荷を軽減するためです。サーバはアクセスがあるたびに、IPアドレスに対してDNSの逆引きをしなければなりません。したがって、サーバ管理者によっては、これを実施しないように設定するのです。
この場合、REMOTE_HOSTの情報をどのように取ればよいのでしょうか。

Perlスクリプトで、REMOTE_ADDRから取得したIPアドレスから逆引きするようにすればよいのです。「gethostbyaddr」関数を使って、ホスト名を取得します。

以下に例を記します。この例では、CGIにアクセスすると、環境変数からアクセス元のIPアドレスを取得し、gethostbyaddr関数を使って、ホスト名を取得し、出力します。

#!/usr/local/bin/perl

$host_name = &GetHostName($ENV{'REMOTE_ADDR'});
print "Content-type: text/html\n\n";
print "あなたのホスト名は、$host_name です。";
exit;

sub GetHostName {
	my($ip_address) = @_;
	my(@addr) = split(/\./, $ip_address);
	my($packed_addr) = pack("C4", $addr[0], $addr[1], $addr[2], $addr[3]);
	my($name, $aliases, $addrtype, $length, @addrs);
	($name, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($packed_addr, 2);
	return $name;
}

さて、このスクリプトで実験してみましょう。

こちらをクリックしてください。

IPアドレスの逆引き

戻る

会社案内 | 特定商取引法に基づく表示 | プライバシーポリシー | 当サイトへのリンクについて | お問い合わせ