SubnetBan
Автор: Lev Версия: 1.3
Информация: автоматическое определение подсети для заданного ИП с помощью баз GeoIP и Whois хранение банов подсетей в ini файле или в mysql базе (задается при компиляци) сохраняет резервную копию ini файла при разбанивании подсети хранит следующюю информацию о бане подсети: начальный адрес подсети конечный адрес подсети разрешенные клиенты (флаги) дата бана последняя дата блокировки подключения из этой подсети причина бана АМХХ логгирование использования команд по умолчанию используется флаг доступа 'n' к командам плагина (можете поменять в файле cmdaccess.ini) показывает всем игрокам уведомление о вновь подключившемся игроке (выводится страна) интеграция с dproto, при подключении игрока, если его ИП попадает в забаненную подсеть, то: проверяется тип клиента используемого игроком и, если этот тип разрешен для данной подсети, то пускает клиента, иначе игроку сообщается о типе разрешенных клиентов и линк на скачку клиента. можете использовать этот плагин и без dproto, если желаете.
Команды: sb_help показывает помощь по использованию других команд sb_ban добавляет бан подсети по: игроку (используется его ИП для автоматического определения подсети), ИП (используется для автоматического определения подсети), начальному и конечному ИП, или подсети в CIDR формате sb_unban удаляет бан подсети по: ИП (удалит одну, самую меньшую, или все подсети содержащие этот ИП) или начальному и конечному ИП (удалит точно совпадающую или все пересекающие подсети) sb_list вывод списка подсетей по: ИП (выведет одну, самую меньшую, или все подсети содержащие этот ИП) или начальному и конечному ИП (выведет точно совпадающую или все пересекающие подсети) sb_search вывод подсетей содержащих в причине заданную подстроку sb_whois запрос к базам Whois по заданному ИП или ИП игрока с выводом ответов в консоль (к сожалению использование не многопоточных сокетов приводит к лагу в игре) sb_stat выводит список игроков на сервере с информацией о: номер игрока, ник, ИП, используемая версия протокола, протокол авторизации (тип используемого клиента), страна, город, название подсети, дополнительная информация из баз Whois (последние два поля требуют sb_use_whois_on_connect "1", что приведет к лагу при подключении игрока)
Квары: sb_sql_host "127.0.0.1" // Сервер MySql sb_sql_user "root" // Логин к базе sb_sql_pass "" // Пароль к базе sb_sql_db "subnetbans" // Название базы
sb_def_allowed_clients "bdgh" // Разрешенные типы клиентов используемые по умолчанию командой sb_ban ("bdgh" = Native Steam, RevEmu, SC2009 и AVSMP) sb_allowed_flags "ab" // Если игрок имеет следующие флаги доступа, то проверка на бан подсети для него не производится sb_downloadurl "http://aghl.ru/files/patches/updater.exe" // Ссылка на скачивание клиента с эмулятором sb_download_clienttype "d" // Тип клиента указанного в ссылке на скачивание sb_announce_connected "1" // Разрешить(1)/Запретить(0) оповещение и вновь подключающихся игроках sb_use_whois_on_connect "0" // Разрешить(1)/Запретить(0) использование баз Whois для получения онформации о подключающихся игроках (приводит к лагу в игре во время запроса к базам Whois) sb_use_whois_for_ban "1" // Разрешить(1)/Запретить(0) использование баз Whois для автоматического определения подсети при использовании команды sb_ban (приводит к лагу в игре во время запроса к базам Whois)
Требования: модуль geoipmax_amxx.dll (Windows), geoipmax_amxx_i386.so (Linux) должен быть установлен; если вы желаете использовать запросы к базам Whois, для игрового сервера должны быть разрешены исходящие подключения TCP на порт 43 и работающий DNS клиент; если вы желаете использовать GeoIp, то вам надо скачать базу GeoLiteCity и скопировать её в папку "addons\amxmodx\data\".
Компиляция: скопируйте файл "subnetban.sma" в папку "addons\amxmodx\scripting\"; скопируйте файлы "common_functions.inl", "ip_functions.inl" и "whois.inl" в папку "addons\amxmodx\scripting\inline\"; для получения SQL версии раскомментируйте (удалите символы //) строчку содержащюю "#define USING_SQL" в файле "subnetban.sma"; для получения INI версии закомментируйте (поставьте символы //) строчку содержащюю "#define USING_SQL" в файле "subnetban.sma"; введите "compile.exe subnetban.sma" (Windows) или "compile.sh subnetban.sma" (Linux) в командной строке (или смотрите тему Компиляция плагинов AMX Mod X); скомпилированный плагин (subnetban.amxx) будет находиться в папке "addons\amxmodx\scripting\compiled\"; рекомендуется переименовать файл с SQL версией в subnetban_sql.amxx.
Инсталляция: скопируйте файл "subnetban.txt" в папку "addons\amxmodx\data\lang\"; для INI версии: скопируйте файл "subnetban.amxx" в папку "addons\amxmodx\plugins\"; добавьте строчку "subnetban.amxx" в файл "addons\amxmodx\config\plugins.ini"; для SQL версии: скопируйте файл "subnetban_sql.amxx" в папку "addons\amxmodx\plugins\"; добавьте строчку "subnetban_sql.amxx" в файл "addons\amxmodx\config\plugins.ini"; создайте базу MySql используя приведенный ниже скрипт; установите значения кваров для доступа к базе данных в конфиг файле (например в server.cfg); скопируйте "geoipmax_amxx.dll" (Windows) или "geoipmax_amxx_i386.so" (Linux) в папку "addons\amxmodx\modules\"; скачайте GeoLiteCity базу по ссылке http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz и распакуйте её в папку "addons\amxmodx\data\"; также можете обновить базу GeoLiteCountry, скачайте её по ссылке http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz и распакуйте её в папку "addons\amxmodx\data\"; звук buttons\bell1.wav используется для оповещения о подключившемся игроке, так что проверьте что он есть в папке "valve\sounds\buttons\" на сервере.
Скрипт для создания базы данных: CREATE DATABASE `subnetbans` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; CREATE TABLE `subnetbans`.`subnetbans` ( `startip` INT UNSIGNED NOT NULL , `endip` INT UNSIGNED NOT NULL , `allowedclients` TINYINT UNSIGNED NOT NULL , `datetimebanned` INT UNSIGNED NOT NULL , `datetimelastblocked` INT UNSIGNED NOT NULL , `reason` VARCHAR( 64 ) NOT NULL ); ALTER TABLE `subnetbans`.`subnetbans` ADD UNIQUE `startip_endip` ( `startip`, `endip` ); ALTER TABLE `subnetbans`.`subnetbans` ADD INDEX `startip` ( `startip` ); ALTER TABLE `subnetbans`.`subnetbans` ADD INDEX `endip` ( `endip` );
История версий: v0.6a [2009.10.28] Alpha версия. v0.7a [2009.11.17] + Добавлено: INI версия. v0.8a [2009.11.18] + Добавлено: сохранение причины бана. v0.9a [2009.11.20] + Добавлено: команда sb_whois. + Добавлено: команда sb_stat. + Добавлено: логгирование использования команд. v1.0a [2009.11.20] + Добавлено: оповещение о подключившемся игроке. + Добавлено: сохранение даты бана и даты последней блокировки подключения из подсети. v1.0b [2009.11.21] Beta версия. v1.0b [2009.11.21] + Добавлено: опция компиляции: USING_GEOIP. v1.1b [2009.12.22] ! Исправлено: блокировка бана при sb_use_whois 0. + Добавлено: два квара для управления запросами к базам Whois. v1.2b [2009.04.08] ! Исправлено: команда sb_stat теперь корректно обрабатывает новый тип клиента (HLTV) и все будущие типы клиентов. v1.3 [2011.02.15] Release версия. + Добавлено: поддержка новых типов клиентов dproto: SC2009 and AVSMP. Рекомендуется обновить базу данных: UPDATE `subnetbans` SET `allowedclients`=202 WHERE `allowedclients`=10 ! Исправлено: применение kick к клиенту, если команда disconnect по какой-либо причине не сработала. ! Исправлено: исправление потенциальных ошибок. ! Исправлено: небольшие изменения текстов. ! Изменено: типы клиентов по умолчанию, квар sb_def_allowed_clients, теперь установлен в: "bdgh". + Добавлено: новый квар sb_download_clienttype - используется для показа ссылки на скачку, если данный типа клиента разрешен для забаненной подсети. ! Исправлено: парсинг параметров для команды sb_ban (в случае, когда передавался пустой параметр типа клиентов). + Добавлено: команда sb_search - поиск по указанной подстроке причины бана. Обновите базу данных: ALTER TABLE `subnetbans` CHANGE `reason` `reason` VARCHAR( 64 ) CHARACTER SET latin COLLATE latin1_general_ci NOT NULL
Для превращения шорт в штаны можете использовать следующй скрипт и реджексы: SELECT INET_NTOA(`startip`),INET_NTOA(`endip`),'bd',FROM_UNIXTIME(`datetimebanned`),FROM_UNIXTIME(`datetimelastblocked`),`reason` FROM `subnetbans` (.*?) [\s]*(.*?) [\s]*(.*?) [\s]*(.*? [\s]*.*?) [\s]*(.*? [\s]*.*?) [\s]*(.*) \1 \2 \3 "\4" "\5" "\6"
|