Об IRC. Доступно и со вкусом.

Пишем защиту от разных видов флуда

Существует очень много видов флуда в irc. В данной статье мы рассмотрим как написать своими руками(безусловно в нашей любимой программе mIRC) защиту от некоторых видов.
Кроме различных стандартных методов атаки на компьютер, в IRC существует еще несколько способов, одним из самых распространённых является вызывание переполнения (flood) сообщениями. Сейчас многие сервера, да и клиенты встраивают различные защиты, но они не всегда помогают, да и попрактиковатся в написании скриптов никогда не помешает.
Скрипты будут очень простыми, расчитанными в первую очередь для начинающих скриптописателей :)

Итак наш первый скрипт - защита от CTCP переполнения:
Вставляем в ремоуты/скрипты(Remote/Scripts), в разные версиях и переводах по разному этот раздел называется.

ctcp *:*:*: {
if (!%ctcps.flood) { set -u8 %ctcps.flood 1 }
else { inc %ctcps.flood }
if (%ctcps.flood > 3) {
.ignore -u60 $wildsite
echo -a >> Ctcp flood от $wildsite - игнорим на 60 сек...
}
}
Данный скрипт предотвратит flood, если вам будет послано свыше 3 ctcp запросов в течение 8 секунд, юзер пославший вам их будет заигнорен на 60 секунд.

Разберем скрипт по строчкам:
1 строчка - проверяем наличие перменной %ctcps.flood, если она не существует(символ !) мы создаем ее на 8 секунд и присваиваем значение 1.
2 строчка - если же наша переменная %ctcps.flood уже существует, увеличиваем ее на единицу.
3 строчка - проверка, если переменная %ctcps.flood больше 3, то..
4 строчка - то игнорим на 60 секунд
5 строчка - и выдаем сообщение о флуде в активное окно.

Для автоматизации можно немного модернизировать скрипт и создать менюшку. Чтобы менять время игнора, количество и время сообщений.

Данный скрипт имеет несколько недостатков, во-первых он не проверяет тип ctcpc запроса, например ping,version,finger,time или dcc. Данная пробема решается вставкой исключений if ($1 == PING)..
Во-вторых он не проверяет ник того, кто вас флудит и заигнорен будет последний, кто пошлет запрос. Для решения данной проблемы можно создавать переменную с ником флудящего set -u8 %ctcps.flood. [ $+ [ $wildsite ] ] 1
Ну собственно, данный скрипт и не притендует на лучший, это всего лишь пример, скелет самого скрипта, а остальное все в ваших руках ;)

А сейчас рассмотрим ещо один скриптик для защиты от query(приват) флуда.
Вставляем естественно в remote/ремоуты:
on *:open:?: {
; если открытых окон приват больше 5
if ($query(0) > 5) {
; добавляем в переменную на 10 секунд очередной приват флуда
set -u10 %query.fl %query.fl $nick
; ставим игнор на 60 секунд на все приваты
.ignore -pu60 *
; данный мод есть не на всех серверах, так что проверьте сами
mode $me +G
; сообщаем в активное окно
echo -a >> Query flood, игнорим все приваты на 45 секунд...
; закрываем все приваты флуда
close -m %query.fl
haltdef
}
}

В комментариях я постарался изложить всю работу скрипта. Кому, что не понятно излагайте в форуме.

На подобие нашего первого скрипта от ctcp флуда, можно написать защиту от notice, text и т.д.
На этом пока все, в следущей статье я расскажу как написать простейшую защиту от флуда на канале.
Удачи и держите ушки на макушке ;)