プロが教えるわが家の防犯対策術!

接続元の環境を調べるCGIを求めています。

現在利用中のものが、REMOTE_HOST を利用してホスト情報を取得するように設定されているのですが、REMOTE_HOST を利用したい場合は、apache 側にて HostnameLookups を On にしておく必要があるとの事です。
しかしながら、現在利用中のサーバでは HostnameLookups は Off となっておりました。
HostnameLookups を On にすると、アクセスがある度に名前解決を行い、ホスト情報を取得しようとするため、サーバに負荷がかかってしまいますので、あまりお勧めできませんとの事でした。
その為、HostnameLookups が無効になっている状況でホスト情報を取得したい場合、gethostbyaddr 関数を利用るるのが良いと伺いました。

こちらを利用して以下のような接続元環境を調べたいのですが・・。

your HOST =
your ADDR =

既存のCGI当で結構ですので教えて頂ければ幸いです。
宜しくお願い致します。

A 回答 (2件)

> gethostbyaddrで調べられるクライアント専用ですが


というのは、「クライアントPCのIPアドレスとホスト名が DNS に登録
されている場合やhostsファイルに登録されている場合など」という意味で
す。常に、IPアドレスからホスト名が解決できるわけではありません。

DNSに登録されていない場合では、getnameinfo や Net::DNS でもホスト名
は引けません。

> お薦めはありますでしょうか?
通常の使用でしたら、gethostbyaddr でよいと思います。
    • good
    • 0
この回答へのお礼

ご丁寧にご教示ありがとうございました。
大変参考になり助かりました!

お礼日時:2009/10/08 08:50

gethostbyaddrで調べられるクライアント専用ですが



#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;
use Socket;

my $q = CGI->new();
my $addr = pack( "C4", split( /\./, $q->remote_addr ) );
my $host = gethostbyaddr( $addr, AF_INET ) || die "$!";

print $q->header("text/plain"),
"Your Address = ", $q->remote_addr, "\n",
"Your Host = $host\n";

この回答への補足

問題なく動作いたしました。
ありがとございます。

> gethostbyaddrで調べられるクライアント専用ですが

と、頂きましたので少し調べてみました。
今後IPv6でも対応したい場合、getnameinfoの利用がお勧めのようでした。またPerlモジュールには、Net::DNSもあるようです。

お薦めはありますでしょうか?
また、getnameinfoを利用したバージョンもお知らせ頂けたら幸いです。

補足日時:2009/10/07 14:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!