| Код: <?php /***** ** Конверт киков DBlocker'а в баны SourceBans'а ** Версия 1.0 ** -------------------------------------- ** Обратите внимание на формат в файле DBlocker.log ** Логи версий старее 1.6 не поддерживаются. Формат строк в логе должен быть таким: ** [дд.мм.гггг чч.мм.сс] IP-адрес:порт | SteamID | Ник | Причина ** [06.05.2011 09:26:30] 212.77.xxx.xxx:27005 | STEAM_0:0:xxxxxxxx | NICKNAME | Chat revealing hack ** -------------------------------------- ** Если в ваших логах есть строки от старых версий ДБлокера - удалите их перед запуском скрипта: ** найдите самую первую строку формата, указанного выше, и удалите всё что выше этой строки. ** -------------------------------------- ** При появлении ошибок посетите http://www.fire-games.ru/db_import_bans ** -------------------------------------- *****/
// Параметры подключения к базе данных сорсбанса $sourcebans_mysql_host='127.0.0.1'; // адрес хоста базы $sourcebans_mysql_user='<убрано>'; // имя пользователя $sourcebans_mysql_pass='убрано'; // пароль $sourcebans_mysql_dbname='sourcebans'; // имя базы сорсбанса $sourcebans_mysql_prefix='sb'; // префикс таблиц $sourcebans_mysql_port='3306'; // порт БД (по-умолчанию 3306) $sourcebans_admin_id=3; // ID админа в сорсбансе, от которого банить
// Путь к DBlocker.log (или массив путей, если несколько серверов) и название сервера, (для логфайла, чтобы было видно с какого сервера забанен). // После названия можно через запятую указать ID сервера в сорсбансе, для отметки с логов какого сервера был забанен.
$dblogs=array( // '/usr/cssserv/public/orangebox/cstrike' => 'Public,3', // Linux // 'c:\cssserv\gungame\orangebox\cstrike' => 'GunGame,4', // Windows '/home/<имя пользователя убрано>/server_pub/css/cstrike' => 'Public,1' //linux );
$type = 0; // Тип бана. 0 - SteamID, 1 - IP, 2 - SteamID и IP $logtype=3; // Логирование банов. 0 - выкл, 1 - на экран, 2 - в файл, 3 - в файл и на экран. $logfile='/home/pnp/db_import_bans.log'; // Путь и имя логфайла. $prefix='[DB] '; // Префикс к причине бана. Если указываете - ставьте пробел после него, чтобы не сливался с причиной. $date2reason=1; // Добавлять дату из лога перед причиной бана. 0 - выкл, 1 - вкл.
// Причины киков за которые банить и время бана в минутах. 0 = перманент. $reasons2ban=array( 'Chat revealing hack' => 0, 'Invalid view angles' => 0, 'Injected Cheat' => 0, 'Cvar infraction' => 0, );
// Замены причин для занесения в банлист. // Можно не заполнять, в таком случае заносится причина из списка киков списка выше - reasons2ban // Для тех причин, значение которых мы знаем. Например, Invalid view angles это часто аимбот, так что // занесём его в банлист на одну минуту для того чтобы поискать SteamID на предмет банов на других серверах. // $replaces2reasons=array( 'Invalid view angles' => 'Забанен за угол зрения', 'Причина кика из лога DBlocker' => 'Замена для причины в банлист', );
// ----------------------------------------------------------------------------------------
mysql_connect($sourcebans_mysql_host.':'.$sourcebans_mysql_port, $sourcebans_mysql_user, $sourcebans_mysql_pass) or die("Could not connect to database!"); mysql_select_db($sourcebans_mysql_dbname); mysql_query("SET NAMES utf8");
if ($logtype == 2 || $logtype == 3) { if (!$logfile=fopen($logfile,'a')) die('Don\'t open logfile'); fwrite($logfile,'['.date('d.m.Y H:i:s')."]\r\n"); }
$banned_steams=array(); // Не менять $bans=0; // Не менять
foreach ($dblogs as $path => $servname) { $server_id=0; // Не менять $servnameexp=explode(',',$servname); if (count($servnameexp)==2) { $servname=$servnameexp[0]; $server_id=$servnameexp[1]; } $log=file($path.'/DBlocker.log'); foreach ($log as $log_str) { $start=0; $str[0]=substr($log_str,0,strpos($log_str,'|')); $start=strpos($log_str,'|',$start)+1; $str[1]=substr($log_str,$start,strpos($log_str,'|',$start)-$start); $start=strpos($log_str,'|',$start)+1; $str[2]=substr($log_str,$start,strrpos($log_str,'|')-$start); $str[3]=substr($log_str,strrpos($log_str,'|')+1); preg_match_all('#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#i',$str[0],$ip); if (!isset($ip[0][0])) { echo "Invalid DBlocker logfile format in ".$path."/DBlocker.log\r\n"; break; } $date=substr($log_str,0,strpos($log_str,']')+1); $ip=$ip[0][0]; $steam_id=trim($str[1]); if (in_array($steam_id,$banned_steams)) continue; $banned_steams[]=$steam_id; $nickname=mysql_real_escape_string(trim($str[2])); $kick_reason=trim($str[3]); foreach ($reasons2ban as $reason => $length) { if (strpos($kick_reason,$reason) !== false) { if (isset($replaces2reasons[$reason])) $reason=$replaces2reasons[$reason]; $reason=($date2reason) ? $prefix.$date.' '.$reason:$prefix.$reason; $res=mysql_query("SELECT authid FROM ".$sourcebans_mysql_prefix."_bans WHERE authid='".$steam_id."' AND (length=0 OR length=60 OR ends>".time().")"); if (@mysql_num_rows($res)) break; $length=$length*60; $endtime=time()+$length; if ($type==2) { mysql_query("INSERT INTO ".$sourcebans_mysql_prefix."_bans (ip, authid, name, created, ends, length, reason, aid, sid, country, type) VALUES ('".$ip."', '".$steam_id."', '".$nickname."', ".time().", ".$endtime.", ".$length.", '".mysql_real_escape_string($reason)."',".$sourcebans_admin_id.", ".$server_id.", 'zz', 0)"); $type=1; } mysql_query("INSERT INTO ".$sourcebans_mysql_prefix."_bans (ip, authid, name, created, ends, length, reason, aid, sid, country, type) VALUES ('".$ip."', '".$steam_id."', '".$nickname."', ".time().", ".$endtime.", ".$length.", '".mysql_real_escape_string($reason)."',".$sourcebans_admin_id.", ".$server_id.", 'zz', ".$type.")"); $bans++; $nickname=stripslashes($nickname); if ($logtype == 1 || $logtype == 3) echo "Added ban to IP: $ip, SteamID: $steam_id, Nick: $nickname, Reason: $reason, Time: $length sec, Server: $servname\r\n"; if ($logtype == 2 || $logtype == 3) fwrite($logfile,"Added ban to IP: $ip, SteamID: $steam_id, Nick: $nickname, Reason: $reason, Time: $length sec, Server: $servname\r\n"); } } } } if ($logtype == 2 || $logtype == 3) { fwrite($logfile,"\r\nAdded $bans ban(s).\r\n\r\n"); fclose($logfile); } if ($logtype == 1 || $logtype == 3) { echo "\r\nAdded $bans ban(s).\r\n\r\n"; }
?> | |