IRC Client KVIrc forum

Russian talks => Скриптинг => Topic started by: drugold on 4 September 2007, 23:43



Title: Скрипт добавления банов прокси-адресов
Post by: drugold on 4 September 2007, 23:43
Дано:
1. Файл "proxy.txt" с адресами прокси-серверов ([IP]:[Port]).
2. Требуется запустить скрипт с параметрами: /proxy [причина бана]

Сам скрипт:
Code:
# Proxy AKILL ADD

%a = $hash();
for(%i = 0;$file.readLines(F:/SOFTWARE/KVIrc/proxy.txt,%i);%i++)
{
%a{%i} = $str.token(0,$char(44),$str.token(0,$char(58),$file.readLines(F:/SOFTWARE/KVIrc/proxy.txt,%i)))
}
foreach(%i,$keys(%a))OperServ AKILL ADD +0 $str.append(*@,%a{%i}) $0-
Скрипт работает, но с маленькими базами. При 2000 строках и более квирк подвисает и вылетает по пингу.
Как бы его поправить/переписать для больших баз, чтобы квирк не подвисал?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 5 September 2007, 11:05
Я не совсем понял, какого формата у тебя файл со списком прокси-серверов, но мой скрипт использует такой (адреса придуманы):
88.45.678.21:886
88.45.678.22:886
88.45.678.23:886


Code:
alias(proxy)
{
# Proxy AKILL ADD
if ($0 == "") %reason = "your host is in a ban-list";
else %reason = $0-;
%proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);
foreach(%proxy, %proxies)
{
%ip = $str.token(0, ":", %proxy);
OperServ AKILL ADD +0 *\@%ip %reason
}
}

KVIrc подвисает на время отправки всех OperServ AKILL ADD. Эта команда не принимает список банов в качестве параметра, поэтому никак не обойтись без отправки 5000 таких команд.
При тесте на файле с 5000 записями прокси-серверов это все отправилось за несколько секунд. За какое время OperServ обработает все эти команды? Я не знаю)


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 5 September 2007, 12:42
1. Базы двух типов у меня:
IP:Port
[номер]  IP:Port
Как бы сделать чтоб с обеими работал скрипт?
2. Поясни, пожалуйста, работу строки: %proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);

и функции foreach в данном скрипте
3. Как вставить в ризон скрипта спецсимволы (жирный шрифт и цвет)?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 5 September 2007, 14:32
1. Разные типы баз в разных файлах или в одном?
Приведи здесь, пожалуйста, несколько строк каждого типа.

2. %proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);
Заносит каждую строку из файла в отдельный элемент массива %proxies. При этом строки в файле должны разделяться по крайней мере символами конца строки ($lf) (если в текстовом редакторе нажать ввод, то этот символ вставится в конце строки)
Ну а перебор foreach(%proxy, %proxies) последовательно перебирает все элементы массива %proxies, занося текущий элемент в переменную %proxy. Таким образом в переменной %proxy оказывается одна запись(строка) вида 88.45.678.21:886. Из нее потом выделяется ip и на этот ip прописывется AKILL

3. Спецсимволы можно вставить так: в редакторе скриптов квирка символ жирности вставляется по нажатию Ctrl+B. Вставится $b (это можно написать и самому, не нажимая Ctrl+B). Жирным будет выводиться текст, заключенный между двумя такими символами.
Спецсимвол цвета ($k) вставляется по нажатию Ctrl+K. Цвет символа и цвет фона указываются в скобках: $k(цвет_символа,цвет_фона), например $k(3,4) - зеленый текст на красном фоне. Или просто $k(3) - зеленый текст. Указанное цветовое оформление работает до следующего символа $k. Если указать $k без параметров, то это будет означать сброс всякого оформления.
Будет ли OperServ запоминать причину бана со спецсимволами, я не знаю. Возможно, он их просто вырежет. Проверишь сам.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 6 September 2007, 14:59
1. Вот несколько строк списка:
Quote
88.88.88.88:80
99.99.99.99:8080
456  56.89.77.123:3128
56  82.144.56.47:3000
Желательно, чтоб скрипт понимал оба варианта.

2. Я заметил особенность. Скрипт срабатывает со второго запроса, т.е. пишу: /proxy -молчит, еще раз пишу -работает.
3. Насчет цветов, спасибо, все работает.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 7 September 2007, 12:23
1. Сделай цикл foreach таким:
Code:
foreach(%proxy, %proxies)
{
%ip = %proxy;
        %ip =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
OperServ AKILL ADD +0 *\@%ip %reason
}

Это будет срабатывать на обе формы записи, даже если они находятся в одном файле.
Если файлов несколько (пару штук), просто продублируй код и для второго файла. Если файлов много - создай тогда алиас, который принимал бы в качестве параметра путь к файлу.

2. Не замечал такой особенности. Внутри скрипта не вижу никаких причин для срабатывания со второго раза. Как только отдана команда, ты должен увидеть множественные RAW команды в консоли.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 7 September 2007, 22:25
1. Что-то вообще перестало работать:
Code:
alias(proxy)
{
# Proxy AKILL ADD
if ($0 == "") %reason = "$k(4)ACCESS DENIED! Open Proxy found on your host";
else %reason = $0-;
%proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);
foreach(%proxy, %proxies)
             {
                    %ip = %proxy;
                                  %ip = =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
                    OperServ AKILL ADD +0 *\@%ip %reason
              }
}
Вот итоговый код и теперь получаю:
Quote
OperServ AKILL ADD +0 *@=~ s/.*(\d+.\d+.\d+.\d+):.*/\1/ ACCESS DENIED! Open Proxy found on your host
OperServ AKILL ADD +0 *@=~ s/.*(\d+.\d+.\d+.\d+):.*/\1/ ACCESS DENIED! Open Proxy found on your host

2. Когда набираю первый раз, то никаких RAW команд нет. Вообще никак не реагирует. А вот со второго раза запускается.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 7 September 2007, 23:53
Ой, прошу прощения((
В общем не 
%ip = =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
а
%ip =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/

oO.. что чувствовал OperServ, когда получал ту чушь?..


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 8 September 2007, 10:06
1. Вот, теперь работает.
Что выдавал OperServ я написал. Он ничего не чувствует, а честно отрабатывает))
2. Насчет запуска со второго раза есть мысли? Может какие-то настройки влияют?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 8 September 2007, 14:40
У меня работает с любого раза. Ты выполняешь /proxy из командной строки или в теле какого-то другого скрипта?
Для проверки того, в каком месте что ломается, внеси в скрипт отладочные echo сообщения:
Code:
alias(proxy)
{
echo Запущен алиас $b"proxy"$b
if ($0 == "") %reason = "$k(4)ACCESS DENIED! Open Proxy found on your host";
else %reason = $0-;
%proxies = $file.readLines(g:/software/kvirc/proxy.txt);
echo Из файла прочитано $length(%proxies) записей
foreach(%proxy, %proxies)
        {
%ip = %proxy;
        %ip =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
        echo Выполняем $b"AKILL ADD"$b для %ip
OperServ AKILL ADD +0 *\@%ip %reason
        }
        echo Работа алиаса завершена, ждите ответа OperServ
}

Результат выполнения скрипта у меня вот такой:
Quote
[13:37:46] Запущен алиас proxy
[13:37:46] Из файла прочитано 4 записей
[13:37:46] Выполняем AKILL ADD для 88.88.88.88
[13:37:46] [RAW]: OperServ AKILL ADD +0 *@88.88.88.88 ACCESS DENIED! Open Proxy found on your host
[13:37:46] Выполняем AKILL ADD для 99.99.99.99
[13:37:46] [RAW]: OperServ AKILL ADD +0 *@99.99.99.99 ACCESS DENIED! Open Proxy found on your host
[13:37:46] Выполняем AKILL ADD для 56.89.77.123
[13:37:46] [RAW]: OperServ AKILL ADD +0 *@56.89.77.123 ACCESS DENIED! Open Proxy found on your host
[13:37:46] Выполняем AKILL ADD для 82.144.56.47
[13:37:46] [RAW]: OperServ AKILL ADD +0 *@82.144.56.47 ACCESS DENIED! Open Proxy found on your host
[13:37:47] Работа алиаса завершена, ждите ответа OperServ
[13:37:47] *OperServ* Доступ запрещен.
[13:37:47] *OperServ* Доступ запрещен.
[13:37:47] *OperServ* Доступ запрещен.
[13:37:47] *OperServ* Доступ запрещен.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 8 September 2007, 18:27
Набираю в консоли /proxy и....тишина. Второй раз набираю и тогда:
Quote
[18:25:51] Запущен алиас proxy
[18:25:51] Из файла прочитано 4 записей
[18:25:51] Выполняем AKILL ADD для 66.66.66.66
[18:25:51] OperServ AKILL ADD +0 *@66.66.66.66 ACCESS DENIED! Open Proxy found on your host
[18:25:51] Выполняем AKILL ADD для 88.88.88.88
[18:25:51] OperServ AKILL ADD +0 *@88.88.88.88 ACCESS DENIED! Open Proxy found on your host
[18:25:51] Выполняем AKILL ADD для 55.55.55.55
[18:25:51] OperServ AKILL ADD +0 *@55.55.55.55 ACCESS DENIED! Open Proxy found on your host
[18:25:51] Выполняем AKILL ADD для 77.77.77.77
[18:25:51] OperServ AKILL ADD +0 *@77.77.77.77 ACCESS DENIED! Open Proxy found on your host
[18:25:51] Работа алиаса завершена, ждите ответа OperServ
Чтобы не делать лишних банов я поставил echo перед OperServ AKILL ADD +0 *\@%ip %reason
Все остальное без изменений. Да, еще заметил, что все последующие разы он выполняется раз за разом.
То есть: первый раз не срабатывает, второй, третий итд уже работает. А если зайти в алиасы и нажать ОК или Применить, то опять не работает с первого раза.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Hadros on 8 September 2007, 20:51
Посмотрите на самую первую строку в вашем алиасе proxy в редакторе алиасов, она выглядит так: "alias(proxy)" или сразу начинается сам скрипт "# Proxy AKILL ADD"?
Если "alias(proxy)", то удалите эту строку и следующую за ней открывающую фигурную скобку "{", а так-же в самом конце скрипта закрывающую скобку "}"


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 8 September 2007, 21:05
Удалил и все заработало с первого раза, спасибо. Интересно для чего тогда они писались?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Hadros on 8 September 2007, 21:12
Code:
alias(proxy)
{
# Proxy AKILL ADD
if ($0 == "") %reason = "$k(4)ACCESS DENIED! Open Proxy found on your host";
else %reason = $0-;
%proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);
foreach(%proxy, %proxies)
             {
                    %ip = %proxy;
                                  %ip = =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
                    OperServ AKILL ADD +0 *\@%ip %reason
              }
}
это скрипт создания алиаса, а
Code:
# Proxy AKILL ADD
if ($0 == "") %reason = "$k(4)ACCESS DENIED! Open Proxy found on your host";
else %reason = $0-;
%proxies = $file.readLines(F:/SOFTWARE/KVIrc/proxy.txt);
foreach(%proxy, %proxies)
{
%ip = %proxy;
%ip = =~ s/.*(\\d+\.\\d+\.\\d+\.\\d+):.*/\\1/
OperServ AKILL ADD +0 *\@%ip %reason
}
это срипт самого алиаса.
При первом запуске у вас создавался алиас proxy, а при последующих выполнялся


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 8 September 2007, 21:21
Аа, тогда ясно, спасибо за разъяснение.
Имеется у меня сервис, он проверяет прокси еще по портам. Как бы с помощью квирка сгенерировать лист портов 80-99999 и записать столбиком в файл "ports.txt". А потом попробую изменить данный скрипт, чтоб он вбил порты в лист сервиса.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 8 September 2007, 22:40
Порты какие-то конкретные или абсолютно все из диапазона 80-99999? Если абсолютно все, то не вижу смысла создавать для этого файл. Просто нужно в нужном месте нужного скрипта проверять порт на вхождение в диапазон 80-99999 :)


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 9 September 2007, 04:00
Имеется сервис: сканер открытых портов протоколов HTTP, HTTPPOST, SOCKS4, SOCKS5, WINGATE, ROUTER. Там уже вбиты стандартные порты. Требуется расширить диапазон до 80-99999. Для этого нада вбить ручками: /OPSB ADD <type> <port>
Само-собой вручную это затруднительно, вот и хотел попробывать скриптом сделать. Тут чем-то похоже на AKILL ADD, только вместо хостов диапазон портов. Однако и файл с портами еще нужно создать. Или можно как-то проще сделать?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 9 September 2007, 15:50
цикл по диапазону портов 80-99:
Code:
for (%i=80; %i<100; %i++)
{
echo /OPSB ADD <type> %i
}

Что за <type>?

PS: я не особо усердно искал, но выяснил, что OPSB 2.4 поддерживает только 50 портов в списке. Если я что-то не так понял, поправь.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 9 September 2007, 18:24
1. <type> -это и есть HTTP, HTTPPOST, SOCKS4, SOCKS5, WINGATE, ROUTER
2. Я использую версию 3.0.a3.225. А где посмотреть кол-во портов?


Title: Re: Скрипт добавления банов прокси-адресов
Post by: Maximusya on 9 September 2007, 18:49
Я OPSB не пользуюсь, просто погуглил, чтобы немного понять, что за оно.
Полагаю, такой цикл тебя устроит:
Code:
%services = $array(HTTP, HTTPPOST, SOCKS4, SOCKS5, WINGATE, ROUTER);
foreach(%service, %services)
{
for (%i=80; %i<100; %i++)
{
echo /OPSB ADD %service %i
}
}

Здесь, как видишь, цикл от 80 до 99. Исправишь на 100000, если OPSB воспримет такое количество.
Если нужно добавить\удалить какой-то сервис, изменишь $array() на то, что тебе нужно.
Это можно скопировать в тестер сценариев и выполнить. Или создать алиас и вставить это в его тело.


Title: Re: Скрипт добавления банов прокси-адресов
Post by: drugold on 9 September 2007, 18:59
Хотел спросить, какие еще есть эффективные средсва борьбы с проксями? Ибо добавлять хосты в акилл дело гиблое. Их итак уже несколько тысяч. По портам, видимо, эффективнее, но опять же может не получиться все порты внести. Может есть какое-то более эффективное средство?
P.S. По-умолчанию было всего 500 портов. Подправил код, стало 600000  :) Потестирую насколько быстро будет сканить.