![]() |
Управление bot-ом по HTTP
Возникло много вопросов по управлению bots.
Модель с центром управления. Бот - клиент Если взять одного бота, то бот должен: 1) проверить есть ли Интернет; 2) законнектиться на хостинг к php-скрипту; 3) передать свои параметры (id, IP-компа, время и др.); 4) записать их в БД; 5) получить новую комманду; 6) выполнить комманду; 7) цикл пп. 5-6 (или при выходе их инета 2-6) Вопросы: - Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос; - Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!! Что думаете Вы ??? |
Цитата:
б) Можно немного оптимизировать. Что-то вроде этого: после того как бот подключился несколько раз с интервалом в 20 сек и не получил новой команды, то он увеличивает интервал до 20 минут. Цитата:
Цитата:
|
ICQ бот пеши
|
Цитата:
за советы спасибо Цитата:
|
А на чем бот-то написан?
|
а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?
|
Цитата:
|
уточню вопрос:
Интересует именно управление конкретным ботом (с определенным id), т.е. вышел на связь - управляем им конкретно !!! Если делать большие интервалы для коннекта к центру управления, то мы его теряем в N-й момент времени при управлении центром Получается надо делать высокую частоту запросов (секунды). Бот на связи - > управляем им |
Цитата:
То есть по HTTP протоколу теоретически возможно установить соединение в режиме ожидания без растрат траффига? |
Вот нашел
Цитата:
|
2 VARVAR
см ниже , по сути сервер всё время будет отвечать на первый и единственный GET 2Nightmare именно так , сервер просто не должен прекращать передачу данных , точнее разрывать соединение* , тоесть бот отправляет GET и теперь всё время (пока есть соединение) ждет/принимает/обрабатывает приходящие команды (причем асинхронно (или в отдельном потоке) иначе бот повиснет на приёме) *прим. требуется хостинг с возможностью изменить время выполнения скрипта на стороне сервера можно (или использовать сокеты) или зациклить скрипт: while (true) { /// узнаем например sql запросом не появилась ли новая команда /// если да то echo (комманда) /// sleep(5) } |
Лично я считаю, что самым наилучшим вариантом было бы держать постоянное подключение. То есть бот сделал коннект к вашему хосту через сокет, и начинает ждать данных (получается бек коннект, если я не ошибаюсь).
|
Получается Keep-Alive нужен для посылки нескольких запросов подряд без разрыва соединения.
Но GET-запросы bot все равно должен делать (типа: я на связи !!!) Вот этот цикл зачем делать ? Запрос GET все равно обращается к скрипту ! Цитата:
|
либо, как уже писали, юзай sleep(5000) - отстук через 5 секунд.
либо сделай бек-коннект на боте, и пусть он только при запуске стучит на гейт, который записывает ip. |
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен
mr.The 5000 секунд, если что |
Цитата:
если что... мануал читай. |
Цитата:
Код:
$man sleepКод:
int sleep ( int $seconds )Код:
VOID WINAPI Sleep( |
Спасибо парни за реальные советы.
Про sleep() я в курсе. Я думаю так сделать: - Бот коннектится к php-скрипту допустим через 10-30 секунд (я на связи !) - Для шелла (cmd-комманды) надо изменить sleep() и посылать GET-запросы уже через 1 секунду Получается гибкое HTTP-управление c изменяемым интервалом коннекта. Как Вам эта идея ! |
Идея использовать HTTP для управления изначально требует наличие сервера, который, как минимум, выдержит нагрузку бот-нета, не говоря уже про своевременную реакцию на команды и т.п.
Как альтернативный вариант могу предложить использовать Twitter для управления ботами. Поясню почему: - открытый API, что дает возможность написать свой клиент для администрирования; - отсутствие проблем с сервером; - возможность отдавать команды практически из любого места, благо сервис твиттера поддерживает постинг сообщений даже средствами SMS. |
axxaxa c0n Difesa ты жжошь. я как раз недавно натыкался на новость что твиттер - сервер обновлений ботнета. только там банят быстро...
|
Зачем лишние сложности !
все и так пашет по HTTP. Хороший метод без заморочек. думаю как cmd сделать - дело за малым (реализовать). |
По мне так лучший вариант командовать ботом - по IRC
+ Не забанят, сайт могут закрыть. + Можно выбирать канал в зависимости от даты, тогда будет сложно вычислить + Зарекомендовавший себя метод Можно и по е-мэйл. + Можно передавать/получать файлы + Можно генерировать ящики так же в зависимости от даты. А сайт,ИМХО, прикроют быстро... |
Цитата:
пока я сам на него не забил ))) Все методы имеют свои преимущества и недостатки , потому спорить какой лучше мне кажется бесполезным |
Когда-то делал что-то подобное, создал на сервере фтп, и бот(на С#) сканил локальную папку, что никак не кушает интернет, после получения команды (а это был обычный текстовый файл с параметрами обработки, которые он знак как обработать) отсылал на сайт, что в 12:12:12, получена команда такая-то, и ответ (что-то типа:
команда 1 выполнена; команда 2 выполнена; команда 3 стоит в очереди выполнения, (осталось 2м 20 сек); статус сервера: Хреново;) На 2м конце была панель управления ботом, которая знала все команды, заходила на фтп и кидала этот файл, сервер сразу выполнял (что означает что он онлайн и давал результат). С сайта можно было делать все тоже самое. |
| Время: 18:44 |