Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Управление bot-ом по HTTP (https://forum.antichat.xyz/showthread.php?t=134386)

VARVAR 11.08.2009 22:33

Управление bot-ом по HTTP
 
Возникло много вопросов по управлению 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

Цитата:

Сообщение от Jes
а например (как вариант) 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

Цитата:

Сообщение от Gifts
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

Цитата:

Сообщение от Acrid_gluk
А сайт,ИМХО, прикроют быстро...

у меня гейт под видом монитора для cs полтора висел ))
пока я сам на него не забил )))

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

WAYS 23.08.2009 06:25

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


Время: 18:44