【再度】「Oracle9iAS」上でホスト名を取得 | 闇プロジェクト::zoe

【再度】「Oracle9iAS」上でホスト名を取得

昨日の続きで本日も、「Oracle9iApplicationServer」で動くイントラネット内へアクセスしてきたリモートホスト名の取得を行っていた。

昨日取得できた環境はapacheが動いているサーバがwindowsである開発機だったのだけど、本番機は「HP-UX PA-RISC 64bit 11i」です。

その違いが災いして、本番機で同じように取得しようとすると、取れませんでした。


原因は、「イントラ内のクライアントPCのコンピュータ名をDNSサーバへ登録していないこと」でした。


DNSサーバに名前解決の問い合わせを行うコマンドの「nslookup IPアドレス」をコマンドプロンプトから実行しても「can't find 128.71.111.111: Non-existent domain」となることでDNSへの登録が行われていないとわかります。

では何故、winサーバは取れたかというと、
多分ですが、開発機がwinのためNetBIOS over TCP/IP環境であるため、「nbtstat -a 128.71.111.111」を行って指定されたコンピュータ名のマシンが持っているNetBIOS名を表示するとちゃんとホスト名(コンピュータ名)を取得できることから、同じように

owa_util.get_cgi_env('REMOTE_HOST')

を実行しても内部で投げているであろうネットワークコマンドが、winとunix系では違うのかなと思います。


そんなこんなで、ホスト名の取得が出来なかったんですが、別にリアルタイムでデータが欲しいというわけでないということもあって、取り合えずホスト名以外のデータ(IP、ユーザ名とか)を集めて、後でバッチ処理でホスト名を取得することにしました。

僕のPCで動いてるPHPでそのバッチを処理してみると、


mb_http_output("SJIS");
$ipfile = "ip.txt"; // ipが入ってるINファイル
$hostfile = "host.txt"; // ipとhostを入れるOUTファイル

$all = @file($ipfile);
$hostf = @fopen($hostfile, "r+");

for ($i = 0; $i < count($all); $i++){
$all[$i] = chop($all[$i]);

$a=$all[$i]. "\t" . gethostbyaddr($all[$i]) ."\n";

fputs($hostf, $a);

}

fclose($hostf);


こんな感じでした。


isi