新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mxa.meshnet.or.jp>
Subject: Re: REMOTE_HOST について
Date: 1998/05/01 23:39:59
Reference: mesh.program/00490

5月1日に、satoshi kusunokiさんは書きました。

>さっき気がついたのですが、infowebのユーザーホームページでは
>gethostbyaddr関数を使っても逆引きでないようになっている。
>自分で関数を作る代りになるものはないでしょうか?
>
つまり、サーヴァのOS自体がDNSを引かない設定に変えられてしまった、と
言うことですか?

うーむ、そうまでしてDNSサーヴァの負荷を下げようとしている時に、自分で
DNSを引くような設定をしてしまって良いのかどうか? と言う問題はありますね。

また、実際問題としてDNSサーヴァとやり取りして名前解決を計るのは
面倒な作業ですから、出来合いのルーティン群を使うのが簡単ですが、
そう言うルーティン群はデフォルトではインストールされていないで
しょうから、自分でインストールしなくてはなりませんね。(^^;;

取りあえず、perl5を使っているのなら、Net::DNS(現行ヴァージョンは
Net-DNS-0.12.tar.gzですね)を使うのが簡単だと思います。

例えば、以下のようなテストスクリプトを書いて見ました。

#!/usr/local/bin/perl

use Net::DNS;

$address = '133.205.10.1'; # 試しにここのアドレスを入れてみましょうか。
$nameserver = '127.0.0.1'; # ここはもちろん実際にはDNSサーヴァのIPアドレスにします。

printf("%s -> %s\n", $address, &gethost($address));

exit(0);

sub gethost {
	my ($address) = @_;
	my $res = new Net::DNS::Resolver;
	$res->nameservers($nameserver);
	my $query = $res->search($address, 'PTR');
	if ($query) {
		foreach ($query->answer) {
			next if ($_->type ne 'PTR');
			return($_->rdatastr);
		}
	}
	return($address);
}

実行すると、

133.205.10.1 -> www2.biglobe.ne.jp.

と出力されました。(^^)

# perl -MCPAN -e 'shell' するようになってから、うちのサーヴァは
# Moduleてんこ盛りになっています。新しいのが出るとすぐ入れるし。(^^;;;