CGI-BBS > CGI > Perl > COSMO GATE-EXのログについて


カレッヂ
カレッヂ


質問者 ぶんぶん  投稿日 2/2(金) 13:53:44
KENTさんのCOSMO GATE-EX(v2.54)のlog.datに入室社のホスト名を記録するやり方を教えて下さい。(もしくは、Honey BoardのログにIPアドレスを記録するやり方)
私は、KENTさんのHoney BoardにこのCOSMO GATE-EXを使ってアクセス制限をしているのですが、Honye BoardのログファイルにはIPアドレスが記録されない為、荒らし行為があったとき、どの会員が荒らし行為を行ったか分かりません。
この書き込みが注意事項に違反している事は分かっていますが、どの検索エンジンで検索しても情報は見付かりませんでした。
もう、ここしかないのです!
宜しくお願いします。

COSMO GATE-EXの設置場所
http://susuki.sakura.ne.jp/~lol/cgi-bin/bbs/honey/urabbs/gatex.cgi
KENTさんのホームページ
http://www.kent-web.com/
回答者 maeda  [削除]  投稿日 2/5(月) 14:06:41
こんにちは。
私はプロではないのでお役に立てるかわかりませんが。

Honey Board自体にはホストを所得するプログラムが書かれているのですが
それでも取れないのでしょうか?
どの会員のIPも取れない状況なのですか?

こっちで試してみたのですが、ちゃんとIPが取れています。

# ホスト名取得に gethostbyaddr関数を使用 (0=no 1=yes)
$gethostbyaddr = 1;

の設定はちゃんとできているのでしょうか?
回答者  [削除]  投稿日 2/5(月) 17:57:31
>この書き込みが注意事項に違反している事は分かっていますが

これはKENT-WEBでの話ですね。
ここでは大丈夫です。

あそこはサポート掲示板の規約を破ると
ガラの悪い人達にボコボコにされるから。
質問者 ぶんぶん  [削除]  投稿日 2/7(水) 22:35:39
># ホスト名取得に gethostbyaddr関数を使用 (0=no 1=yes)
>$gethostbyaddr = 1;
Honey Boardでのホスト名取得は既にできているので、IPの取得をしたいのです。
$gethostbyaddrを1にしてもやはりIPの所得できませんでした。
おそらく、改造しないとIPの取得はできないと思うので、どなたかやり方を教えて下さい。
回答者 さくら  [削除]  投稿日 2/8(木) 01:18:31
私は、KENTさんのプログラムを見ていないので、一応、参考までに聞いてください。

まず、IPアドレスを取得するには、環境変数を使用する。

$addr = $ENV{'REMOTE_ADDR'}  これで $addr にIPアドレスが入った。

皆さんの解答を見るところ、gethostbyaddr を使っているようなので、
そうすると、すでにIPアドレスは取得しているはずだ、ただ他の場所でIPアドレスを
使用していないだけだろう。なぜなら gethostbyaddr を使用してホスト名を取得するには
下記のような コードを使うからだ。

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

IPアドレスは0から255までの数値をドットで区切って4つ並べたものだ、
その最初の2つをpackしたもを gethostbyaddr の引数にして、ホスト名を取得しているのだ。

このような説明は必要無かったかもしれないが、貴方がやるべき事は、
プログラムのどこかで $ENV{'REMOTE_ADDR'} が使用されているかを探す事だ。
あれば、冒頭に書いたように変数に代入されているはずなので、その変数を使用できる。

又、ログファイルに書きこむには、ログファイルを読み書きしている箇所を探して、
IPアドレスの入った変数を追加しなければならないが、
ファイルの読み書きには、open を使用するのでそこをすべてチェックする。
ログファイルも変数に代入されている可能性が高いので、なんのファイルを読み書きしているか
の確認も間違い無くすること。
bbsの場合、一般的には、1エントリーを1行にレコードするものだ。
その為、各データを join や split を使って、データを結合したり分割したりして
利用する。
データを増やす場合、そのへんの整合性を取らねばならないが
データラインの一番最後に追加するのが良いだろう。

必ずしも、ここに示したような手法を使っているとは限らないので、
改造には充分注意して欲しい。
悪い副作用が起きずに成功する事を祈ります。

貴方の参考になれば幸いです。

返信(回答)する


Web裏技