Просмотр полной версии : Управление bot-ом по HTTP
Возникло много вопросов по управлению bots.
Модель с центром управления.
Бот - клиент
Если взять одного бота, то бот должен:
1) проверить есть ли Интернет;
2) законнектиться на хостинг к php-скрипту;
3) передать свои параметры (id, IP-компа, время и др.);
4) записать их в БД;
5) получить новую комманду;
6) выполнить комманду;
7) цикл пп. 5-6 (или при выходе их инета 2-6)
Вопросы:
- Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос;
- Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!!
Что думаете Вы ???
- Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос;
а) если интервалы не малые то трафик норм.
б) Можно немного оптимизировать. Что-то вроде этого: после того как бот подключился несколько раз с интервалом в 20 сек и не получил новой команды, то он увеличивает интервал до 20 минут.
- Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!!юзать не HTTP-протокол, а что-то свое, основанное на постоянном подключении. Но если это действительно ботнет то тогда возникнут другие проблемы.
Что думаете Вы ???думаю писать ботов нехорошо;)
toby1980
11.08.2009, 23:13
ICQ бот пеши
думаю писать ботов нехорошо
это для пробы !
за советы спасибо
ICQ бот пеши
так вроде отжило уже
а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?
А на чем бот-то написан?
На С конечно. Размер 3КБ пока
уточню вопрос:
Интересует именно управление конкретным ботом (с определенным id),
т.е. вышел на связь - управляем им конкретно !!!
Если делать большие интервалы для коннекта к центру управления, то мы его теряем в N-й момент времени при управлении центром
Получается надо делать высокую частоту запросов (секунды).
Бот на связи - > управляем им
Nightmarе
12.08.2009, 05:20
а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?
Вот про этот способ хотелось бы поподробнее узнать.
То есть по HTTP протоколу теоретически возможно установить соединение в режиме ожидания без растрат траффига?
Вот нашел
Connection (соединение)- может принимать значения Keep-Alive и close.
Keep-Alive ("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep-Alive, так как он позволяет за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи однажды установленным, режим Keep-Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close.
close ("закрыть") - соединение закрывается после ответа на данный запрос.
А запрос GET все равно делать надо.
2 VARVAR
см ниже , по сути сервер всё время будет отвечать на первый и единственный GET
2Nightmare
именно так ,
сервер просто не должен прекращать передачу данных , точнее разрывать соединение* , тоесть бот отправляет GET и теперь всё время (пока есть соединение) ждет/принимает/обрабатывает приходящие команды (причем асинхронно (или в отдельном потоке) иначе бот повиснет на приёме)
*прим. требуется хостинг с возможностью изменить время выполнения скрипта
на стороне сервера можно (или использовать сокеты) или зациклить скрипт:
while (true)
{
/// узнаем например sql запросом не появилась ли новая команда
/// если да то echo (комманда)
/// sleep(5)
}
Лично я считаю, что самым наилучшим вариантом было бы держать постоянное подключение. То есть бот сделал коннект к вашему хосту через сокет, и начинает ждать данных (получается бек коннект, если я не ошибаюсь).
Получается Keep-Alive нужен для посылки нескольких запросов подряд без разрыва соединения.
Но GET-запросы bot все равно должен делать (типа: я на связи !!!)
Вот этот цикл зачем делать ? Запрос GET все равно обращается к скрипту !
while (true)
{
/// узнаем например sql запросом не появилась ли новая команда
/// если да то echo (комманда)
/// sleep(5)
}
либо, как уже писали, юзай sleep(5000) - отстук через 5 секунд.
либо сделай бек-коннект на боте, и пусть он только при запуске стучит на гейт, который записывает ip.
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен
mr.The 5000 секунд, если что
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен
mr.The 5000 секунд, если что
sleep(n), где n - количество миллисекунд
если что...
мануал читай.
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.
Спасибо парни за реальные советы.
Про 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 ты жжошь. я как раз недавно натыкался на новость что твиттер - сервер обновлений ботнета. только там банят быстро...
Зачем лишние сложности !
все и так пашет по HTTP. Хороший метод без заморочек.
думаю как cmd сделать - дело за малым (реализовать).
Acrid_gluk
20.08.2009, 13:58
По мне так лучший вариант командовать ботом - по IRC
+ Не забанят, сайт могут закрыть.
+ Можно выбирать канал в зависимости от даты, тогда будет сложно вычислить
+ Зарекомендовавший себя метод
Можно и по е-мэйл.
+ Можно передавать/получать файлы
+ Можно генерировать ящики так же в зависимости от даты.
А сайт,ИМХО, прикроют быстро...
А сайт,ИМХО, прикроют быстро...у меня гейт под видом монитора для cs полтора висел ))
пока я сам на него не забил )))
Все методы имеют свои преимущества и недостатки , потому спорить какой лучше мне кажется бесполезным
Когда-то делал что-то подобное, создал на сервере фтп, и бот(на С#) сканил локальную папку, что никак не кушает интернет, после получения команды (а это был обычный текстовый файл с параметрами обработки, которые он знак как обработать) отсылал на сайт, что в 12:12:12, получена команда такая-то, и ответ (что-то типа:
команда 1 выполнена;
команда 2 выполнена;
команда 3 стоит в очереди выполнения, (осталось 2м 20 сек);
статус сервера: Хреново;) На 2м конце была панель управления ботом, которая знала все команды, заходила на фтп и кидала этот файл, сервер сразу выполнял (что означает что он онлайн и давал результат). С сайта можно было делать все тоже самое.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot