wwwchat.cgiでIPまたはホスト名を表示〜するには?

[上に] [前に] [次に]
KMR 1998/04/05(日) 02:20:43
wwwchat.cgiで、IPまたはホスト名を表示出来たらいいなと思うのですが・・・。
可能であれば、教えて下さい。

KMR 1998/04/05(日) 04:05:13
曖昧な発言でしたので、改めて書きました。
IPではなくて、DNSだったのです。
例)123.456.789.abc.ne.jpなどと言うように・・・。
失礼致しました。(^^;

B-Cus 1998/04/05(日) 04:29:48
NTサーバで動かしてますか?

$ipにIPアドレスが入っていたとしたら
$host = gethostbyaddr(pack('C4',split(/\./,$ip)),2) || $_;
で変換できると思います。

> IPではなくて、DNSだったのです。

DNSというのはドメインネームをIPアドレスに変換する(あるいは
その逆も)システムです。この場合はドメインネームとかFQDNとか
言った方が適当です。

B-Cus 1998/04/05(日) 06:26:00
あ、もしかしてそれ以前の問題でしたか?

基本的に、環境変数REMOTE_HOSTにはFQDNが、REMOTE_ADDRには
IPアドレスが入ります。FQDNを持たないホストだと両方IPアドレス
となります。

サーバがNTだと(IISかな?)常に両方IPアドレスが格納されている
ようなので、gethostbyaddrで変換するといいでしょう。
でもサーバがapacheやNSCAなどであれば原則通り
「環境変数REMOTE_HOSTにはFQDN、REMOTE_ADDRにはIPアドレス」
です。

KMR 1998/04/06(月) 00:29:10
あまり詳しい事は解らないのですが、使っているのはWin95/NTではありません。Win95です。
wwwchat.cgiで発言内容の後にDNSを表示させたいのです。
例)
−−−−−−−−−−−−−−−−−−−−−−−
KMR  4月6日(日) 0時25分
こんにちわ。           123.456.789.abc.ne.jp ←これなのですが・・・。
−−−−−−−−−−−−−−−−−−−−−−−
可能でしょうか?

B-Cus 1998/04/06(月) 00:48:42
とりあえず

print "$ENV{'REMOTE_HOST'}($ENV{'REMOTE_HOST'})";

をどこかに放り込んでみてください。どこに書き込めばいいのかは
ソースを眺めていろいろ試してみてください。

> DNSを表示させたいのです。

DNSではなく、ドメインネームかFQDNが適当です、ってば。

> 使っているのはWin95/NTではありません。Win95です。

あなたが使っているOSではなく、WWWサーバのOSのことです。

B-Cus 1998/04/06(月) 00:49:48
あー失礼。

> print "$ENV{'REMOTE_HOST'}($ENV{'REMOTE_HOST'})";

print "$ENV{'REMOTE_HOST'}($ENV{'REMOTE_ADDR'})";

です。

Omi [E-Mail] 1998/04/07(火) 13:46:20
MiniBBSv8に、こんな行がありましたよ。

$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }

お恥ずかしながら、これは perl? java? という頭脳レベルなんですー。(・_;)
何をしているんでしょうねぇ。

miyasiro 1998/04/08(水) 01:53:02
java ではなく perl です。で、B-Cus さんがおっしゃってることと同じことをしてます。

つまり、REMOTE_HOSTがドメインネームであれば、これを $host に格納し、
REMOTE_HOSTとREMOTE_ADDRが同じなら(即ち、REMOTE_HOSTが
ドメインネームではなく、REMOTE_ADDRと同じIPアドレスだった場合には)、
このIPアドレスをgethostbyaddrでドメインネームに変換し $host に格納し
ます。また、gethostbyaddrによる取得に失敗した場合には、 $host に
REMOTE_ADDRのIPアドレスが格納されます(つまり、この場合のみ
数字とピリオドだけの表示になります)。
ちょっとややこしいですが、この3行はそのままカットアンドコピーできます。
そして、$hostを表示すればOKです。


miyasiro 1998/04/08(水) 01:55:43
あっ、書き忘れです。
コピー先のスクリプトで $host と $addr の変数名が先に使われて
いるなら、適当に変更する必要があります。

KMR 1998/04/08(水) 04:00:35
miyasiroさんへ
色々行ってみましたが、初心者なので良く解らないのです。(^^;
>ちょっとややこしいですが、この3行はそのままカットアンドコピーできます。
>そして、$hostを表示すればOKです。
よろしければ”wwwchat.cgi”のスクリプトで、この部分をこう書きかえる様に指示を
頂ければ助かるのですが・・・。
宜しくお願いします。  m(__)m

miyasiro 1998/04/08(水) 19:03:02
コピーする3行は、どこでもいいんですが、例えば
# Write current message.
#
の次の行でしょうか。

そして、その数行後にある3個所の print OUT の後の文字列中の
$FORM{'FROM'}\n や $FORM{'FROM'}</A>\n を
$FORM{'FROM'}[$host]\n や $FORM{'FROM'}</A>[$host]\n にすれば
いいんじゃないかな?
試した訳ではないので、表示文字列が長すぎてテーブルが変になるかも知れませんが…

KMR 1998/04/09(木) 00:53:11
miyasiroさんへ
指示された通りやってみましたが、うまく行きませんでした。
チャットネームが消えてしまいます。
hostも表示されませんでした。
困ったなぁ。

miyasiro 1998/04/09(木) 04:37:00
なんかドジしたかなと思って、試しにうちでやってみたら、できましたよ?
# Write current message.
より下の修正した部分を書き込んで見せてもらえます?

KMR 1998/04/10(金) 01:14:46
miyasiroさんへ
え?  うまく行きましたか・・・。
と言う事は、私が間違っているのでしょうね。(^^;
私は、次の様にしました。

             # Write current message.
#
$FORM{'MESSAGE'} =~ s/\r*$//g;
$FORM{'MESSAGE'} =~ s/\r/<BR>/g;
       open(OUT, ">wwwchat.tmp");
if ($FORM{'URL'} eq "") {
                        print OUT "__XXX__ $date $FORM{'FROM'}[$host]\n";
             } elsif ($FORM{'URL'} =~ /^http:/) {
                        print OUT "__XXX__ $date <A HREF=\"$FORM{'URL'}\">$FORM{'FROM'}</A>[$host]\n";
             } else {
                        print OUT "__XXX__ $date <A HREF=\"mailto:$FORM{'URL'}\">$FORM{'FROM'}</A>[$host]\n";
             }

この他に、何か手を加えるのでしょうか?
お手数をお掛けして、スイマセン。

miyasiro 1998/04/10(金) 09:43:54
あれ? コピーの3行は?
KMRさんの変更に加えて、下のように3行を追加してください。

# Write current message.
#
$host = $ENV{'REMOTE_HOST'}; # 挿入する
$addr = $ENV{'REMOTE_ADDR'};; # 挿入する
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }; # 挿入する
$FORM{'MESSAGE'} =~ s/\r*$//g;
$FORM{'MESSAGE'} =~ s/\r/<BR>/g;

KMR 1998/04/11(土) 01:43:26
miyasiroさんへ
上記の通りやってみましたが、うまく行きません。
やはり、チャットネーム、ホスト名が表示されません。
そして、上記の3行を消すとチャットネームが正常に表示されます。(純正なパターンのチャットです。)
まだ何かおかしい様です。Netscape Communicator 4.04(ja) がいけないのでしょうか。

miyasiro 1998/04/11(土) 03:37:25
んなアホな〜! と思ってたら、私のミスでした。すいませんm(_._)m
perl5をお使いですね。
$FORM{'FROM'}[$host] が配列のハッシュとして扱われていました。
つまり、$FORM{'FROM'}に配列へのリファレンスが格納されていると解釈されたため、
チャットネームもホスト名も消えてしまったのです。

で、対策ですが、たとえば下のように [ の直前に \ を入れて下さい。
$FORM{'FROM'}\[$host]
$FORM{'FROM'}の直後に [ があるのが問題なので、\ の代わりに空白でもいいし、
[ 自体を別の安全な文字に変えてもOKです。

KMR 1998/04/12(日) 02:37:14
miyasiroさんへ
うまくいきました。(^0^)
バッチリですね。ありがとうございます。
勝手な質問で、大変申し訳なく思っています。
ついでに、もう1つお聞きしたいのですが、ホスト名で頭の記号と数字は何を表しているのでしょうか。
例えば、abc.232.xxx.ne.jpの場合abcと232です。
ご存知でしたらお教え下さい。お願いします。

miyasiro 1998/04/12(日) 03:08:23
ドメインネームの頭の記号と数字ですか…
申し訳ない、実は私はインターネットのことをあまりよく知らないんです(^^;
どなたか、ご存知の方、いらっしゃいませんでしょうか?

ところで、最初の質問は、発言内容の後にドメインネームを付けるんでしたよね。
その場合は、$host は上の場所ではなく、その直ぐ下の行の
print OUT "$FORM{'MESSAGE'} [$host]\n";
に付けてください。
(この場合も $FORM{'MESSAGE'} と [$host] の間には空白や \ などを忘れずに!)

とほほ 1998/04/12(日) 14:52:19
abc.232.xxx.ne.jp の場合、最初の名前(abc)がマシン名、それ以降
はすべて(232もxxxもneもjpも)グループや組織を表す名前となります。
232の部分が何を意味するかは、プロバイダによって異なります。

KMR 1998/04/12(日) 23:55:22
[[解決]]
みなさん、ご親切にどうも有り難うございました。これにて、解決と致します。
特にmiyasiroさんには、最後まで御指導頂き本当に感謝しております。
また解らない事が有った場合、よろしくお願い致します。

[上に] [前に] [次に]