Возникло много вопросов по управлению bots. Модель с центром управления. Бот - клиент Если взять одного бота, то бот должен: 1) проверить есть ли Интернет; 2) законнектиться на хостинг к php-скрипту; 3) передать свои параметры (id, IP-компа, время и др.); 4) записать их в БД; 5) получить новую комманду; 6) выполнить комманду; 7) цикл пп. 5-6 (или при выходе их инета 2-6) Вопросы: - Получается bot постоянно шлет GET-запросы через очень малые интервалы (т.е. большой трафик) и получает комманду на каждый запрос; - Нельзя ли сделать, чтобы он просто ждал ? Но бот то клиент !!! Что думаете Вы ???
а) если интервалы не малые то трафик норм. б) Можно немного оптимизировать. Что-то вроде этого: после того как бот подключился несколько раз с интервалом в 20 сек и не получил новой команды, то он увеличивает интервал до 20 минут. юзать не HTTP-протокол, а что-то свое, основанное на постоянном подключении. Но если это действительно ботнет то тогда возникнут другие проблемы. думаю писать ботов нехорошо
уточню вопрос: Интересует именно управление конкретным ботом (с определенным id), т.е. вышел на связь - управляем им конкретно !!! Если делать большие интервалы для коннекта к центру управления, то мы его теряем в N-й момент времени при управлении центром Получается надо делать высокую частоту запросов (секунды). Бот на связи - > управляем им
2 VARVAR см ниже , по сути сервер всё время будет отвечать на первый и единственный GET 2Nightmare именно так , сервер просто не должен прекращать передачу данных , точнее разрывать соединение* , тоесть бот отправляет GET и теперь всё время (пока есть соединение) ждет/принимает/обрабатывает приходящие команды (причем асинхронно (или в отдельном потоке) иначе бот повиснет на приёме) *прим. требуется хостинг с возможностью изменить время выполнения скрипта на стороне сервера можно (или использовать сокеты) или зациклить скрипт: while (true) { /// узнаем например sql запросом не появилась ли новая команда /// если да то echo (комманда) /// sleep(5) }
Лично я считаю, что самым наилучшим вариантом было бы держать постоянное подключение. То есть бот сделал коннект к вашему хосту через сокет, и начинает ждать данных (получается бек коннект, если я не ошибаюсь).
Получается Keep-Alive нужен для посылки нескольких запросов подряд без разрыва соединения. Но GET-запросы bot все равно должен делать (типа: я на связи !!!) Вот этот цикл зачем делать ? Запрос GET все равно обращается к скрипту !
либо, как уже писали, юзай sleep(5000) - отстук через 5 секунд. либо сделай бек-коннект на боте, и пусть он только при запуске стучит на гейт, который записывает ip.
VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен mr.The 5000 секунд, если что
Это зависит от того где ты его юзаешь, например: Code: $man sleep ... NAME sleep - Sleep for the specified number of seconds SYNOPSIS #include <unistd.h> unsigned int sleep(unsigned int seconds); ... Да, и например в том же PHP тоже Code: int sleep ( int $seconds ) А вот в винде, да, уже Code: VOID WINAPI Sleep( __in DWORD dwMilliseconds ); Только тут разговор уже о Sleep.
Спасибо парни за реальные советы. Про sleep() я в курсе. Я думаю так сделать: - Бот коннектится к php-скрипту допустим через 10-30 секунд (я на связи !) - Для шелла (cmd-комманды) надо изменить sleep() и посылать GET-запросы уже через 1 секунду Получается гибкое HTTP-управление c изменяемым интервалом коннекта. Как Вам эта идея !
Идея использовать HTTP для управления изначально требует наличие сервера, который, как минимум, выдержит нагрузку бот-нета, не говоря уже про своевременную реакцию на команды и т.п. Как альтернативный вариант могу предложить использовать Twitter для управления ботами. Поясню почему: - открытый API, что дает возможность написать свой клиент для администрирования; - отсутствие проблем с сервером; - возможность отдавать команды практически из любого места, благо сервис твиттера поддерживает постинг сообщений даже средствами SMS.
axxaxa c0n Difesa ты жжошь. я как раз недавно натыкался на новость что твиттер - сервер обновлений ботнета. только там банят быстро...
Зачем лишние сложности ! все и так пашет по HTTP. Хороший метод без заморочек. думаю как cmd сделать - дело за малым (реализовать).