日本国内 IP かを判定するモジュール

Drk7jpトップ > Perl >

お役立ちフリーCGI、Perl Module、Perl テクニックなど Perl ネタが中心

日本国内 IP かを判定するモジュール

以前ご紹介した「日本国内に割り当てられたIPの調査」を利用して、リクエスト元が日本国内かを判定する Perl module を作成しました。割り当て IP は時々刻々と変化していくので、いずれ陳腐化していくと思いますが、当面は利用価値のある module となると思います。
利用用途としては、Blog 等の Comment SPAM 対策などに利用できます( MT への組み込み方もあわせて紹介します。)
update 04.07.23 / 最新の IP リストを作成する CGI を同梱しました。

スクリプトはこちら(JpOnly.pm) 

<動作環境>
Perl 5 が使える環境ならどれでも。(Linuxでしか動作確認してませんが...)
<モジュールの設置方法>
(1)メインCGIが設置してあるディレクトリ配下に 'Drk' いうディレクトリを作成します。
(2)ダウンロードしたファイルを解凍して、作成した'Drk' ディレクトリ配下に全てのファイルをFTPします。
(3)makelist.pl のパーミッションに実行権を与えます。755等に設定下さい。
(4)メインCGI内の #!/usr/bin/perl の下付近に、use lib "./"; を追加します。
以上で、メインCGI内で Drk::JpOnly が使用可能になります。

<Drk::JpOnlyのメソッド>
  • $ipOK = Drk::JpOnly->new();
    コンストラクタ。引数の時は、日本国内の IP アドレスからのリクエストの場合、1 を返す。それ以外は 0 を返す。
    引数が"make"の時は、IP リストを作成するモードになる。(同梱の makelist.pl で使用)

<最新の IP リストへ更新する方法>
makelist.pl をコマンドラインもしくは、Webブラウザ経由で実行下さい。ipfile.dat が更新されます。

<MT への組み込み方>
(1)MT をインストールした配下にある 'extlib' ディレクトリ内に 'Drk' いうディレクトリを作成して JpOnly.pm を FTP します。
(2)'lib/MT/App/Comments.pm' ファイル内にある 70行〜80行目あたりを下記のように編集下さい。
if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}
use Drk::JpOnly;
unless( Drk::JpOnly->new ) {
return $app->handle_error('Post from overseas was Banned');
}

これで、海外からの(゚Д゚)ウゼェェェ Comment SPAM が全てシャットアウトできます!!


Posted by drk at 2004年04月17日 16:52 | おすすめ情報 | Comments (6) | はてなブックマークに追加 |
このエントリーに関連するキーワードとエントリ一覧

以下の書籍が参考になります

コメントをお寄せください










本件に対するコメント(6件)
kazui さん>うちではcronで毎日データをアップデートしています。

0 6 * * * perl /home/apache/cron/makelist.pl

プログラムはこんな感じです。

#!/usr/local/bin/perl -w
require "/home/apache/cron/JpOnly.pm";
my $pm = Drk::JpOnly->new("make");

Posted by drk at 2008年03月11日 05:58
kazui ともうします

3年程からlinuxで weblog を公開の準備を初め2年程から公開しております
昨年より外国から無法なアクセスが来るようになり、困っており昨年12月から
対策を検討してきておりました。
当初は iptables で何とかと勉強しましが・・諦め
透過モードのProxyで何とかと squid でと作ってみましが、この目的には・・?
諦めようと集めた情報を整理していましたが、
貴殿のページを改めてよくみていましたら、目的そのものであることが分かり
ました。
予備サーバで以下のように設定しましが、スキルが低く現用機にかける自信が
なく、以下のように設定してみましが
 ・間違がないか?
 ・更新方法もそれでよいか?

よろしくご教授お願いいたします。

<モジュールの設置方法>
予備準備で httpd-deve のインストール
# yum -y install httpd-devel

(1)・/var/www/cgi-bin/Drk/* に JpOnlyのファイル及びディレクトリを入れた
(2)・makelist.pl のパーミッションに実行権(755)を与えました
(3)・makelist.pl のファイルに以下の所に "use lib "./";" を
-- makelist.pl ----
#!/usr/local/bin/perl -w

use lib "./"; ・←ここに入れました
require "./JpOnly.pm";

my $pm = Drk::JpOnly->new("make");
#print $pm = Drk::JpOnly->new();
---------

以上で間違いないでしょうか

<最新の IP リストへ更新する方法>
・Webブラウザ経由で実行下さい。 ・単に "IE" で htttp://・・/cgi-bin/makelist.pl
                 選ぶ でよいでよいのでしょうか?

-以上-

Posted by kazui at 2008年03月11日 00:27
ウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!!
#!/usr/bin/perl

use lib "./";
use Drk::JpOnly;

print "content-type text/plain\n\n";
print $ipOK = Drk::JpOnly->new();
print "\n";
こんな感じで使っても
Error: ipfile.dat: No such file or directory
とか出ちまう……。

Posted by S.A Studio at 2005年12月03日 17:44
解答ありがとうございます。
教えてもらったのを今度実行してみたいと思います!
Posted by Kunito at 2004年08月27日 19:38
Kunitoさま>サーバの環境によっては不具合があるようです。相手のIPアドレスを環境変数からうまく捕捉できない場合があるようです。代わりといっては何ですが、次のコードでもspam防止ができます。

use Jcode;
my $text = $q->param('text');
if( Jcode::getcode($text) eq "ascii" ) { return $app->handle_error('Post from overseas was Banned'); }
Posted by drk at 2004年08月27日 07:03
おきらくはうすさん経由にてこちらを知りましたが、MTに組み入れる場合は、
説明の2点のみ実行すれば良いのでしょうか?
おきらきさんのとこにはコメントできたのに、自分のとこでは海外なんでダメよってエラーが出ます。
Posted by Kunito at 2004年08月25日 19:35

[△top]

サイト内検索


スポンサードリンク


このブログ中の人に連絡を取りたい

ブログ・アフィリエイト支援ツール

楽天の人気商品をピックアップ

最近の記事

Archives(月別)