Автор Сообщение
 Заголовок сообщения: Re: Импорт киков из логов DBlocker в баны SourceBans - Баны в DBlocker
СообщениеДобавлено: 07 июн 2012, 19:13 
Не в сети
Аватара пользователя

Зарегистрирован: 07 июн 2012, 10:26
Сообщения: 14
Нужна помощь в приведении скрипта в рабочее состояние на Linux (ubuntu).
Не пойму в чем дело, при исполнении скрипта пишет "Don't open logfile". Сначала когда сервер стоял на windows все работало на отлично, после перевода на Linux отказал >:p делал по аналогии, да какой там аналогии, пути изменил и все.
Файл лога есть.
Пытался выставить разрешения на файл лога (толку 0).
Прилагаю сам скрипт:
Код:
<?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";
}

?>


 
 Профиль Отправить email  
 
 
Powered by phpBB © phpBB Group. Designed by Vjacheslav Trushkin