gethostbyaddr関数を用いて、IPからHOST名を引き出して用いれば可能だと思います。
参考URLの『ホスト名取得処理』の部分をみて頂ければ使い方はわかるかと思います。
gethostbyaddr関数でIPからHOST名を取得してきて、引数がNULLかどうかで判別すれば出来ると思いますよ。
実際に動かしていないのでちゃんと動くか不安ですが、
こんな感じで如何でしょう。gethostbyaddrだけじゃなくて、
プロキシ経由の場合の環境変数からも引いています。
-------------ここから-----------------
use CGI;
$clienthostaddr = $ENV{’REMOTE_clienthostaddr’};
if ($ENV{’REMOTE_ADDR’} =~ s/(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/) {
$clienthostaddr = $ENV{’REMOTE_ADDR’};
}
if ($ENV{’HTTP_VIA’} =~ s/.*¥s(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/) {
$clienthostaddr = $ENV{’HTTP_VIA’};
}
if ($ENV{’HTTP_X_FORWARDED_FOR’} =~ s/^(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)(¥D*).*/$1.$2.$3.$4/) {
$clienthostaddr = $ENV{’HTTP_X_FORWARDED_FOR’};
}
if ($ENV{’HTTP_FORWARDED’} =~ s/.*¥s(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/)
{
$clienthostaddr = $ENV{’HTTP_FORWARDED’};
}
$clienthostaddr = gethostbyaddr(pack(’c4’,split(/¥./, $clienthostaddr)), 2) || $clienthostaddr;
if ($clienthostaddr =~ /¥d+¥.¥d+¥.¥d+¥.¥d+/){
&error(”ホスト名が分からないIPアドレスからはアクセスできません。”);
exit;
}
#以下HTTPヘッダーを含むCGIコンテンツ表示
-------------ここまで-----------------
下の2ページは訪問した人の生IPを抜くスクリプトのヒントがかかれています。Proxyを使っていてもこのスクリプトは通常Proxyが通らないソケットから生IPを抜くものなので、参考にしてみては如何でしょうか?
すいません、全体的にアクセス規制と違い、プロキシ経由では閲覧不可にする、というプログラムがなかったため、申しわけありませんが質問をキャンセルさせていただきます。
申し訳ありません。