PDA

Просмотр полной версии : Управление bot-ом по HTTP


VARVAR
11.08.2009, 22:33
Возникло много вопросов по управлению bots.

Модель с центром управления.
Бот - клиент


Если взять одного бота, то бот должен:
1) проверить есть ли Интернет;
2) законнектиться на хостинг к php-скрипту;
3) передать свои параметры (id, IP-компа, время и др.);
4) записать их в БД;
5) получить новую комманду;
6) выполнить комманду;
7) цикл пп. 5-6 (или при выходе их инета 2-6)

Вопросы:

- Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос;
- Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!!

Что думаете Вы ???

bons
11.08.2009, 23:11
- Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос;
а) если интервалы не малые то трафик норм.
б) Можно немного оптимизировать. Что-то вроде этого: после того как бот подключился несколько раз с интервалом в 20 сек и не получил новой команды, то он увеличивает интервал до 20 минут.
- Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!!юзать не HTTP-протокол, а что-то свое, основанное на постоянном подключении. Но если это действительно ботнет то тогда возникнут другие проблемы.
Что думаете Вы ???думаю писать ботов нехорошо;)

toby1980
11.08.2009, 23:13
ICQ бот пеши

VARVAR
11.08.2009, 23:35
думаю писать ботов нехорошо


это для пробы !

за советы спасибо


ICQ бот пеши


так вроде отжило уже

=Zeus=
12.08.2009, 00:55
А на чем бот-то написан?

Jes
12.08.2009, 01:14
а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?

VARVAR
12.08.2009, 01:34
А на чем бот-то написан?


На С конечно. Размер 3КБ пока

VARVAR
12.08.2009, 02:18
уточню вопрос:

Интересует именно управление конкретным ботом (с определенным id),
т.е. вышел на связь - управляем им конкретно !!!

Если делать большие интервалы для коннекта к центру управления, то мы его теряем в N-й момент времени при управлении центром

Получается надо делать высокую частоту запросов (секунды).
Бот на связи - > управляем им

Nightmarе
12.08.2009, 05:20
а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?
Вот про этот способ хотелось бы поподробнее узнать.
То есть по HTTP протоколу теоретически возможно установить соединение в режиме ожидания без растрат траффига?

VARVAR
12.08.2009, 14:07
Вот нашел


Connection (соединение)- может принимать значения Keep-Alive и close.
Keep-Alive ("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep-Alive, так как он позволяет за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи однажды установленным, режим Keep-Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close.
close ("закрыть") - соединение закрывается после ответа на данный запрос.


А запрос GET все равно делать надо.

Jes
12.08.2009, 14:16
2 VARVAR
см ниже , по сути сервер всё время будет отвечать на первый и единственный GET

2Nightmare

именно так ,

сервер просто не должен прекращать передачу данных , точнее разрывать соединение* , тоесть бот отправляет GET и теперь всё время (пока есть соединение) ждет/принимает/обрабатывает приходящие команды (причем асинхронно (или в отдельном потоке) иначе бот повиснет на приёме)

*прим. требуется хостинг с возможностью изменить время выполнения скрипта

на стороне сервера можно (или использовать сокеты) или зациклить скрипт:

while (true)
{
/// узнаем например sql запросом не появилась ли новая команда
/// если да то echo (комманда)
/// sleep(5)
}

Chrome~
12.08.2009, 17:15
Лично я считаю, что самым наилучшим вариантом было бы держать постоянное подключение. То есть бот сделал коннект к вашему хосту через сокет, и начинает ждать данных (получается бек коннект, если я не ошибаюсь).

VARVAR
12.08.2009, 23:26
Получается Keep-Alive нужен для посылки нескольких запросов подряд без разрыва соединения.

Но GET-запросы bot все равно должен делать (типа: я на связи !!!)


Вот этот цикл зачем делать ? Запрос GET все равно обращается к скрипту !

while (true)
{
/// узнаем например sql запросом не появилась ли новая команда
/// если да то echo (комманда)
/// sleep(5)
}

mr.The
13.08.2009, 10:54
либо, как уже писали, юзай sleep(5000) - отстук через 5 секунд.
либо сделай бек-коннект на боте, и пусть он только при запуске стучит на гейт, который записывает ip.

Gifts
13.08.2009, 21:14
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен

mr.The 5000 секунд, если что

W!z@rD
14.08.2009, 06:54
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен

mr.The 5000 секунд, если что

sleep(n), где n - количество миллисекунд
если что...
мануал читай.

__mad
14.08.2009, 14:49
sleep(n), где n - количество миллисекунд
если что...
мануал читай.

Это зависит от того где ты его юзаешь, например:

$man sleep
...
NAME
sleep - Sleep for the specified number of seconds

SYNOPSIS
#include <unistd.h>

unsigned int sleep(unsigned int seconds);
...

Да, и например в том же PHP тоже

int sleep ( int $seconds )


А вот в винде, да, уже


VOID WINAPI Sleep(
__in DWORD dwMilliseconds
);


Только тут разговор уже о Sleep.

VARVAR
14.08.2009, 15:00
Спасибо парни за реальные советы.
Про sleep() я в курсе.

Я думаю так сделать:
- Бот коннектится к php-скрипту допустим через 10-30 секунд (я на связи !)
- Для шелла (cmd-комманды) надо изменить sleep() и посылать GET-запросы уже через 1 секунду

Получается гибкое HTTP-управление c изменяемым интервалом коннекта.
Как Вам эта идея !

c0n Difesa
18.08.2009, 18:32
Идея использовать HTTP для управления изначально требует наличие сервера, который, как минимум, выдержит нагрузку бот-нета, не говоря уже про своевременную реакцию на команды и т.п.

Как альтернативный вариант могу предложить использовать Twitter для управления ботами. Поясню почему:

- открытый API, что дает возможность написать свой клиент для администрирования;

- отсутствие проблем с сервером;

- возможность отдавать команды практически из любого места, благо сервис твиттера поддерживает постинг сообщений даже средствами SMS.

_==wolf==_
19.08.2009, 12:53
axxaxa c0n Difesa ты жжошь. я как раз недавно натыкался на новость что твиттер - сервер обновлений ботнета. только там банят быстро...

VARVAR
20.08.2009, 00:16
Зачем лишние сложности !

все и так пашет по HTTP. Хороший метод без заморочек.

думаю как cmd сделать - дело за малым (реализовать).

Acrid_gluk
20.08.2009, 13:58
По мне так лучший вариант командовать ботом - по IRC
+ Не забанят, сайт могут закрыть.
+ Можно выбирать канал в зависимости от даты, тогда будет сложно вычислить
+ Зарекомендовавший себя метод

Можно и по е-мэйл.
+ Можно передавать/получать файлы
+ Можно генерировать ящики так же в зависимости от даты.

А сайт,ИМХО, прикроют быстро...

Jes
20.08.2009, 14:25
А сайт,ИМХО, прикроют быстро...у меня гейт под видом монитора для cs полтора висел ))
пока я сам на него не забил )))

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

WAYS
23.08.2009, 06:25
Когда-то делал что-то подобное, создал на сервере фтп, и бот(на С#) сканил локальную папку, что никак не кушает интернет, после получения команды (а это был обычный текстовый файл с параметрами обработки, которые он знак как обработать) отсылал на сайт, что в 12:12:12, получена команда такая-то, и ответ (что-то типа:
команда 1 выполнена;
команда 2 выполнена;
команда 3 стоит в очереди выполнения, (осталось 2м 20 сек);
статус сервера: Хреново;) На 2м конце была панель управления ботом, которая знала все команды, заходила на фтп и кидала этот файл, сервер сразу выполнял (что означает что он онлайн и давал результат). С сайта можно было делать все тоже самое.