Управление bot-ом по HTTP

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by VARVAR, 11 Aug 2009.

  1. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Возникло много вопросов по управлению bots.

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


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

    Вопросы:

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

    Что думаете Вы ???
     
  2. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    а) если интервалы не малые то трафик норм.
    б) Можно немного оптимизировать. Что-то вроде этого: после того как бот подключился несколько раз с интервалом в 20 сек и не получил новой команды, то он увеличивает интервал до 20 минут.
    юзать не HTTP-протокол, а что-то свое, основанное на постоянном подключении. Но если это действительно ботнет то тогда возникнут другие проблемы.
    думаю писать ботов нехорошо;)
     
  3. toby1980

    toby1980 Active Member

    Joined:
    11 Jul 2009
    Messages:
    65
    Likes Received:
    165
    Reputations:
    5
    ICQ бот пеши
     
  4. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    это для пробы !

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

    так вроде отжило уже
     
  5. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    А на чем бот-то написан?
     
  6. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    а например (как вариант) Connection: Keep-Alive и асинхронный прием данных ?
     
  7. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    На С конечно. Размер 3КБ пока
     
  8. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    уточню вопрос:

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

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

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

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Вот нашел

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

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    2 VARVAR
    см ниже , по сути сервер всё время будет отвечать на первый и единственный GET

    2Nightmare

    именно так ,

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

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

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

    while (true)
    {
    /// узнаем например sql запросом не появилась ли новая команда
    /// если да то echo (комманда)
    /// sleep(5)
    }
     
    1 person likes this.
  11. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Лично я считаю, что самым наилучшим вариантом было бы держать постоянное подключение. То есть бот сделал коннект к вашему хосту через сокет, и начинает ждать данных (получается бек коннект, если я не ошибаюсь).
     
  12. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Получается Keep-Alive нужен для посылки нескольких запросов подряд без разрыва соединения.

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


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

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    либо, как уже писали, юзай sleep(5000) - отстук через 5 секунд.
    либо сделай бек-коннект на боте, и пусть он только при запуске стучит на гейт, который записывает ip.
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    VARVAR Пока бот подключен - он и есть на связи, ничего не надо посылать дополнительно. В случае обрыва - бот сам должен переподключиться. А серверный скрипт просто следит кто к нему в данный момент подключен

    mr.The 5000 секунд, если что
     
    _________________________
  15. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    sleep(n), где n - количество миллисекунд
    если что...
    мануал читай.
     
  16. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    Это зависит от того где ты его юзаешь, например:

    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.
     
  17. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Спасибо парни за реальные советы.
    Про sleep() я в курсе.

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

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

    c0n Difesa Member

    Joined:
    1 Jan 2009
    Messages:
    133
    Likes Received:
    66
    Reputations:
    18
    Идея использовать HTTP для управления изначально требует наличие сервера, который, как минимум, выдержит нагрузку бот-нета, не говоря уже про своевременную реакцию на команды и т.п.

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

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

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

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

    _==wolf==_ Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    axxaxa c0n Difesa ты жжошь. я как раз недавно натыкался на новость что твиттер - сервер обновлений ботнета. только там банят быстро...
     
  20. VARVAR

    VARVAR New Member

    Joined:
    3 Jun 2005
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Зачем лишние сложности !

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

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