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さんには、最後まで御指導頂き本当に感謝しております。
また解らない事が有った場合、よろしくお願い致します。
[上に]
[前に]
[次に]