#!/usr/bin/perl

#┌────────────────────────────────────┐
#│ BBS Spambot Trap v1.1 Programed by isso. March, 2007                   │
#│ http://swanbay-web.hp.infoseek.co.jp/index.html                        │
#│                                                                        │
#│ [ 注意事項 ]                                                           │
#│                                                                        │
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用したことによる│
#│    いかなる損害に対して作者は一切の責任を負いません。                  │
#│ 2. このスクリプト設置方法・利用方法は下記URLをご覧下さい。             │
#│    http://swanbay-web.hp.infoseek.co.jp/accesstrap/index.html          │
#└────────────────────────────────────┘

# アクセス制限IPアドレスファイル
$denyfile = './data/denyaddress.cgi';

# アクセス制限IPアドレスディレクトリ
$denydir = './data/';
unless(-d "$denydir") {
	mkdir ($denydir, 0707) || die "$denydir ディレクトリを作成できません : $!";
}

# IPアドレス取得
$addr = $ENV{'REMOTE_ADDR'};

# メインルーチン
&main;

# メインルーチン
sub main {
	if(-e "$denyfile"){
		# アクセス制限ファイルが存在
		open(IN, "$denyfile");
		$deny = <IN>;
		close (IN);
		# アクセス制限IPを検索
		$flag = 0;
		my @denyip = split(/\,/, $deny);
		foreach $denyip (@denyip) {
			if(length($denyip) > 7) {
				$denyip =~ s/\./\\\./g;
				$denyip =~ s/\*/\.\*/g;
				if ($addr =~ /^$denyip/) { $flag = 1; last; }
			}
		}
		if (!$flag) {
			# 新規のアクセス制限IPを追加
			open (OUT,">>$denyfile");
			print OUT "$addr\,";
			close OUT
		}
	} else {
		# アクセス制限ファイルを新たに作成
		open (OUT,">$denyfile") || &error("$denyfileファイルがありません");
		chmod (0606,"$denyfile");
		print OUT "$addr\,";
		close OUT
	}
	&error("アクセス制限エラー");
	exit;
}

#------------------------------------
#  エラー表示
#------------------------------------
sub error {
	$msg = shift;
	print <<EOM;
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">
<META HTTP-EQUIV="Content-Style-Type" content="text/css">
<META NAME="ROBOTS" CONTENT="NOARCHIVE">
<META NAME="ROBOTS" CONTENT="NOINDEX,NOFOLLOW">
<title>$msg</title>
</head>
<body>
<div align="center">
<font color="#FF0000">$msg</font>
<form>
<input type="button" value="前画面にもどる" onclick="history.back()">
</form>
</div>
</body>
</html>
EOM
	exit;
}

__END__

