Форум Pawn.Wiki - Воплоти мечту в реальность!: Создание системы Anti-ADS (защита от рекламы IP) - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Создание системы Anti-ADS (защита от рекламы IP) Легкая система Anti-ADS без плагинов для защиты
Оценка: -----

#1
Пользователь офлайн   Kandinsky 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
[Гайд] Создание системы Anti-ADS (защита от рекламы IP) без плагинов




Введение:
Приветствую всех! В этом уроке мы разберем, как защитить чат вашего сервера от рекламы сторонних проектов. Мы напишем легкий алгоритм на чистом Pawn, который распознает паттерны IP-адресов (цифры, разделенные точками или пробелами), не создавая лишней нагрузки на сервер.




Шаг 1: Создаем функцию-детектор
Эту функцию лучше всего разместить в конце вашего мода или в блоке stocks. Она анализирует текст и ищет совпадения по количеству цифр и разделителей.

stock IsStringAd(const text[])
{
    new digit_count = 0;
    new dot_count = 0;

    for(new i = 0; text[i] != '\0'; i++)
    {
        // Проверяем, является ли символ цифрой
        if(text[i] >= '0' && text[i] <= '9')
        {
            digit_count++;
        }
        // Считаем точки, двоеточия, пробелы (разделители в IP)
        else if(text[i] == '.' || text[i] == ':' || text[i] == ' ')
        {
            dot_count++;
        }
        else // Если пошли другие символы, сбрасываем счетчики
        {
            digit_count = 0; 
            dot_count = 0;
        }

        // Если нашли 4+ цифры и минимум 3 разделителя — это реклама
        if(digit_count >= 4 && dot_count >= 3) return 1;
    }
    return 0;
}





Шаг 2: Внедряем в OnPlayerText
Теперь перехватим сообщение игрока. Если наша функция найдет рекламу, мы заблокируем отправку сообщения через return 0.

public OnPlayerText(playerid, text[])
{
    if(IsStringAd(text))
    {
        SendClientMessage(playerid, 0xFF6347FF, "[Ошибка] {FFFFFF}Реклама на сервере запрещена!");
        
        // Оповещение администрации (пример)
        new adminMsg[128], pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        format(adminMsg, sizeof(adminMsg), "[A] %s [%d] подозревается в рекламе: %s", pName, playerid, text);
        // SendAdminMessage(0xFFFF00FF, adminMsg); 

        return 0; // Сообщение НЕ будет отправлено в общий чат
    }
    return 1; // Пропускаем сообщение, если всё чисто
}





Важные примечания:
  • Ложные срабатывания: Система может реагировать на даты или версии файлов. Рекомендую сначала протестировать её "тихо", отправляя варнинги только админам.
  • Обход через пробелы: В данной версии я добавил проверку пробелов, так что варианты "127 0 0 1" теперь тоже блокируются.





Цитата

От автора:
Это мой первый гайд на форуме, поэтому я заранее извиняюсь, если что-то сделал не так или допустил мелкие ошибки. Я только учусь и буду очень благодарен за конструктивную критику и советы от опытных разработчиков в комментариях!


Надеюсь, этот материал будет полезен для ваших проектов!

Сообщение отредактировал Kandinsky: 03 марта 2026 - 20:16

0

#2
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
127 0 0 1

Ой..
0

#3
Пользователь офлайн   Kandinsky 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияM I S T E V (03 марта 2026 - 19:38) писал:

127 0 0 1

Ой..

Спасибо что указал на мою ошибку. Сейчас же поменяю все на рабочий код
0

#4
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию
Подправьте тему, а именно BBCODE.

Горизонтальная черта: [hr]
Выравнивание текста по центру: [center] ... [/center]

0

#5
Пользователь офлайн   Fara_Kurbanoff 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Обходить очень просто .
0

#6
Пользователь офлайн   Kandinsky 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияFara_Kurbanoff (04 марта 2026 - 21:20) писал:

Обходить очень просто .


Идеальной защиты не существует. Но пока спамер будет подбирать символы, чтобы обойти этот фильтр, его уже трижды забанят по репорту. Для "нубо-рп" и базовой защиты — это маст-хэв. А "профи" всегда найдут дыру, вопрос лишь в их усилиях
0

#7
Пользователь офлайн   Saibot 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
"177_156_154_154" / "177-156-154-154" и тому подобное - пройдет
Ну и если игрок захочет, что-то продать и укажет цену "цена "1 000 000$" - посчитает как рекламу.

Цитата

Идеальной защиты не существует.

Можно сделать, будет ловить с вероятностью 99% и именно IP, но оно того не стоит.

Сообщение отредактировал Saibot: 06 марта 2026 - 22:18

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей

  1. Google

Яндекс.Метрика