Атака сервера
#61

Quote:
Originally Posted by White_116
View Post
Никто и не сделал. Средствами павн этого не сделать. Разве что банальное чтение лога.
хм, я тут смотрю просто - продают всякие труЪ защиты на чистом павне. толи я нуб сделать не могу, толи они - подлые обманщики.
Reply
#62

У кого вдска, не так сложно в принципе реализовать защиту в самом виртуальном сервере.
Средствами баш скриптинга (bash) и иптаблес (iptables).
Тк как в нехороших сообщениях которые пишутся в лог указывается ип, можно написать скрипт который будет читать сервер лога построчно, если находим нужное нам сообщение к примеру Invalid client connecting from , берем из него ип и отсылаем в иптаблес который соответственно банит игрока, как ожидается бан идет на уровне самого виртуального сервера, так что у забаненого самп-сервер не будет пинговаться.
Таким образом мы не нагружаем самп сервер ибо в работу идет только виртуальный сервер который в принципе справляется с этими задачами путем баш скриптов.Так же можно реализовать разбан этих ипов через опр время.
-----
Если на вашем виртуальном сервере одновременно стоит сайт то забаненый на него не сможет зайти.
Можно закрыть доступ забаненому только к порту на котором стоит самп-сервер.
Соответственно сайт будет доступен для него.
-----
Не всегда же над павном издеваться
Reply
#63

Quote:
Originally Posted by DANGER1979
View Post
Как вы смотрите на такую защиту
pawn Code:
new gTimer;
public OnFilterScriptInit()
{
    gTimer = SetTimer("GetNetworkStatsTimer", 1000, 1);
    print(" antipizdos v0.2 By: DANGER1979");
    print("_____________________________________________");
    print(" ");
    return true;
}
public OnFilterScriptExit()
{
    KillTimer(gTimer); gTimer = -1;
    return 1;
}
forward GetNetworkStatsTimer();
public GetNetworkStatsTimer()
{
    new stats[500]; new pip[16]; new playername[MAX_PLAYER_NAME];
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i)) continue;
        if(IsPlayerNPC(i)) continue;
        //if(!IsPlayerConnected(i)) return Kick(i);
        //new stats[418+1];
        GetPlayerNetworkStats(i, stats, sizeof(stats));
       
        new MSB = strval(findParam(stats, "Messages in Send buffer: "));
        if(MSB > 10000) {
            GetPlayerName(i, playername, sizeof(playername));
            GetPlayerIp(i, pip, sizeof(pip));
            printf("antipizdos: kick %s[%d][ip:%s]. Messages in Send buffer: %d", playername, i, pip, MSB);
            Kick(i);
        }
       
        new AS = strval(findParam(stats, "Acks sent: "));
        if(AS > 3000) {
            GetPlayerName(i, playername, sizeof(playername));
            GetPlayerIp(i, pip, sizeof(pip));
            printf("antipizdos: kick %s[%d][ip:%s]. Acks sent: %d", playername, i, pip, AS);
            Kick(i);
        }
    }
    return 1;
}
проверил вроде работает
[02/12/2013 12:53:30] Packet was modified, sent by id: 15, ip: 188.116.54.12:51757
...
[02/12/2013 12:53:33] Packet was modified, sent by id: 15, ip: 188.116.54.12:51757
[02/12/2013 12:53:33] antipizdos: kick Vova_Betman[15][ip:188.116.54.12]. Acks sent: 4197

что не так? что исправить? как у вас?
what is FINDPARAM ?
Reply
#64

От флуда incomming connection. Делал на будущее для себя и решил выложить сюда (хотя бы в качестве примера). Не тестировал. Если собираетесь использовать, настоятельно рекомендую настроить и оттестировать.

pawn Code:
public OnIncomingConnection(playerid, ip_address[], port)
{
    #define MAX_IPS         25      //Максимальное количество ип адресов, которое может храниться в массиве
    #define MAX_WARNINGS    10      //Максимальное количество предупреждений, после которого последует бан
    #define MIN_INTERVAL    3000    //Минимальный интервал между подключениями (в миллисекундах)
   
    enum ip_enumerator
    {
        Ip[16],
        Second
    }
    static Connection[MAX_IPS][ip_enumerator], Ip_Warnings[MAX_IPS char];
   
    if(!strcmp("127.0.0.1", ip_address)) return 1; //Ботов не проверяем
   
    new curtick = GetTickCount(), i;
   
    for(; i < MAX_IPS; i++)
    {
        if(Connection[i][Ip][0] == ip_address[0] && !strcmp(ip_address, Connection[i][Ip]))
        {
            if(curtick - Connection[i][Second] < MIN_INTERVAL)
            {
                if(Ip_Warnings{i}++ > MAX_WARNINGS)
                {
                    BlockIpAddress(ip_address, 600000);
                    Connection[i][Ip][0] = EOS;
                    Connection[i][Second] = Ip_Warnings{i} = 0;
                    //Не знаю, нужно ли здесь самому кикать этого игрока
                    return 1;
                }
            }
            else Ip_Warnings{i} = 0;
           
            Connection[i][Second] = curtick;
           
            return 1;
        }
    }
   
    for(i = 0; i < MAX_IPS; i++)
    {
        if(curtick - Connection[i][Second] > MIN_INTERVAL)
        {
            strmid(Connection[i][Ip], ip_address, 0, 16, 16);
            Connection[i][Second] = curtick;
            Ip_Warnings{i} = 0;
            break;
        }
    }
   
    return 1;
}
Reply
#65

от эксплойта диалога защита есть.
Reply
#66

Quote:
Originally Posted by ReDiX
View Post
У кого вдска, не так сложно в принципе реализовать защиту в самом виртуальном сервере.
Средствами баш скриптинга (bash) и иптаблес (iptables).
Тк как в нехороших сообщениях которые пишутся в лог указывается ип, можно написать скрипт который будет читать сервер лога построчно, если находим нужное нам сообщение к примеру Invalid client connecting from , берем из него ип и отсылаем в иптаблес который соответственно банит игрока, как ожидается бан идет на уровне самого виртуального сервера, так что у забаненого самп-сервер не будет пинговаться.
Таким образом мы не нагружаем самп сервер ибо в работу идет только виртуальный сервер который в принципе справляется с этими задачами путем баш скриптов.Так же можно реализовать разбан этих ипов через опр время.
-----
Если на вашем виртуальном сервере одновременно стоит сайт то забаненый на него не сможет зайти.
Можно закрыть доступ забаненому только к порту на котором стоит самп-сервер.
Соответственно сайт будет доступен для него.
-----
Не всегда же над павном издеваться
Логика, безусловно, здравая, только при большом потоке флуда метод не сработает. Либо забьют всю ширину канала до ВДСки, либо хостер раньше заблэкхолит.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)