掲示板のCGIに、ocnなどの通常のプロバイダのホストのみ閲覧可能で、ホストを取得できない210.50.50.210のようなプロキシを使った場合(プロバイダがわからない)は見ることができない、という風にすることができるプログラムはわかりませんか?通常のアクセス規制などと違い、ホストを取得できない場合閲覧不可とするものです。ご存知の方がいらっしゃいましたらお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2003/03/24 21:09:48
  • 終了:--

回答(4件)

id:rabienrose No.1

らんさいわ回答回数29ベストアンサー獲得回数02003/03/24 21:43:15

gethostbyaddr関数を用いて、IPからHOST名を引き出して用いれば可能だと思います。

参考URLの『ホスト名取得処理』の部分をみて頂ければ使い方はわかるかと思います。

gethostbyaddr関数でIPからHOST名を取得してきて、引数がNULLかどうかで判別すれば出来ると思いますよ。

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332003/03/24 23:19:04

http://www.bayashi.net/st/dofm/

技林/アクセス解析CGI

ここのCGIソースが役に立つのではないでしょうか。

id:watal No.3

watal回答回数130ベストアンサー獲得回数02003/03/24 23:57:13

実際に動かしていないのでちゃんと動くか不安ですが、

こんな感じで如何でしょう。gethostbyaddrだけじゃなくて、

プロキシ経由の場合の環境変数からも引いています。

-------------ここから-----------------

use CGI;

$clienthostaddr = $ENV{’REMOTE_clienthostaddr’};

if ($ENV{’REMOTE_ADDR’} =~ s/(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/) {

$clienthostaddr = $ENV{’REMOTE_ADDR’};

}

if ($ENV{’HTTP_VIA’} =~ s/.*¥s(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/) {

$clienthostaddr = $ENV{’HTTP_VIA’};

}

if ($ENV{’HTTP_X_FORWARDED_FOR’} =~ s/^(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)(¥D*).*/$1.$2.$3.$4/) {

$clienthostaddr = $ENV{’HTTP_X_FORWARDED_FOR’};

}

if ($ENV{’HTTP_FORWARDED’} =~ s/.*¥s(¥d+)¥.(¥d+)¥.(¥d+)¥.(¥d+)/$1.$2.$3.$4/)

{

$clienthostaddr = $ENV{’HTTP_FORWARDED’};

}

$clienthostaddr = gethostbyaddr(pack(’c4’,split(/¥./, $clienthostaddr)), 2) || $clienthostaddr;

if ($clienthostaddr =~ /¥d+¥.¥d+¥.¥d+¥.¥d+/){

&error(”ホスト名が分からないIPアドレスからはアクセスできません。”);

exit;

}

#以下HTTPヘッダーを含むCGIコンテンツ表示

-------------ここまで-----------------

id:kotona No.4

kotona回答回数69ベストアンサー獲得回数02003/03/25 04:19:03

下の2ページは訪問した人の生IPを抜くスクリプトのヒントがかかれています。Proxyを使っていてもこのスクリプトは通常Proxyが通らないソケットから生IPを抜くものなので、参考にしてみては如何でしょうか?

id:crazymaster

すいません、全体的にアクセス規制と違い、プロキシ経由では閲覧不可にする、というプログラムがなかったため、申しわけありませんが質問をキャンセルさせていただきます。

申し訳ありません。

2003/03/26 04:23:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません