Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Ещё раз ICQ


Автор: uid0gid0 11.5.2006, 09:39
Здравствуйте , я хочю написать приложение , которое будет работать с ICQ протоколом. Дело в том что мне нужно чтоб при ошибке или ещё чего-нибудь , приложение будет кидать админу (то есть мне :-)) мессагу , мол так-то-так то я не хочю работать. 
Вот теперь столкнулся с проблемой , нифига не понятен протокол ICQ ...помогите пожалуйста , любая инфа будет полезной 
ЗЫ Не посылать на этим доки , я там всёравно ничего не понял :
http://www.ihse.net/icq/
http://iserverd.khstu.ru/oscar/
http://www.rejetto.com/icq/
http://www.oilcan.org/oscar/
....Помогите люди...
Ах да , и ещё , не спрашивайте почему именно по ICQ , просто заказчик идиот smile я ему говорил давай по ирк...шучю ) 

Автор: cozzzy 11.5.2006, 16:53
Цитата(uid0gid0 @  11.5.2006,  08:39 Найти цитируемый пост)
ЗЫ Не посылать на этим доки , я там всёравно ничего не понял :

Ну почитай еще здесь:
http://www.icqinfo.ru/icqprotocol.shtml
http://www.realcoding.net/article/view/635
http://freshmeat.net/articles/view/359/
 

Автор: uid0gid0 12.5.2006, 06:45
Спасибо , там тоже почитаю. Мне бы на русском обьяснения всего этого smile продолжаем тему.... 

Автор: uid0gid0 12.5.2006, 16:02
Вот например , я приконнектился к серверу ( с сокетами я работать умею ) , патом туда надо отправить какойто пакет...хрен его знает как этот пакет делать .... smile  

Автор: Aike 14.5.2006, 00:09
У меня вот на что фантазии хватило:

Код

#include "winsock2.h"
#include "packet.h"

void main()
{
    WSADATA wsa;
    WSAStartup(0x0202, &wsa);

    SOCKET hSocket = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr ( "64.12.200.89" );
    sin.sin_port = htons( 5190 );

    connect(hSocket, (sockaddr *) &sin, sizeof(sin));

    char recvbuf[255];
    recv(hSocket, recvbuf, sizeof(recvbuf), 0);

    icq_cookie_login pack;

    pack.dwLeng = 0x2A;
    pack.uin = 123456789;
    pack.pass = "";
    pack.ClientProfile = "ICQBasic";
    pack.CliMajor = 20;
    pack.CliMinor = 34;
    pack.CliLesser = 0;
    pack.CliBuild = 2321;
    pack.CliSubBuild = 1085;
    pack.CliLang = 0x0F;
    pack.CliCountr = 0x0E;

    send(hSocket, (const char*) &pack, sizeof(pack), 0);
    
    closesocket(hSocket);
    WSACleanup();
    return;
}

packet.h
Код

typedef struct icq_cookie_login
{
  DWORD dwLeng;
  DWORD uin;
  void *pass;
  char* ClientProfile;
  BYTE CliMajor;
  BYTE CliMinor;
  DWORD CliLesser;
  DWORD CliBuild;
  DWORD CliSubBuild;
  int CliLang;
  int CliCountr;
} icq_cookie_login;
 
В зависимости от pack.dwLeng = 0x2A; сервер разные запросы присылает (проверял ICQMenace'ом) 

Автор: uid0gid0 15.5.2006, 07:16
Айк дружЫще , спасибо попробую поковырять (только проснусь..) , тема не закрыта ! 

Автор: uid0gid0 15.5.2006, 08:54
Это коннект ? 

Автор: Aleksiem 29.5.2006, 01:12
Не знаю нужно ещё или нет ну вообщем смысл в следующем:
1. Ты присоединяешься к серваку login.icq.com порт 5190
2. Он тебе посылает первый пакет c данными $00000001 (не считая заголовка).
Эт типа стартовый пакет.
Далее ты ему посылаешь пакет с твоим логином проксоренным паролем, описанием твоего клиента и всякой фигней. Всё описано http://www.icqinfo.ru правда на английском, но довольно просто (я с шестью классами немецкого разобрался). 
Это указано в коде Aike, скорей всего верно, не могу говорить точно пишу в основном на Delphi.
3. В ответ на пакет с логином он тебе посылает пакет с твоим номером, ипаком и портом сервера к которому надо присоединиться и кукисами  (256 бит случайных данных). Сразу после этого пакета он тебе посылает прощальный пакет после которого разрывает соединение.
4. Ты присоединяешься к указанному серверу. Он тебе приветственный пакет, ты ему пакет с кукисами.
Дальше идёт нудный разбор SNAC и анализ всего пришедшего в них. Сам ещё не до конца разобрался.
Могу если надо выложить коды на Delphi что уже сделал. Правда там пока не очень много.
В описании мог пропустить некоторые детали так, как пишу на память. Но если какие проблемы будут в реализации всего вышеописанного, думаю специалисты по С тебе помогут. Опять же опускаю устройство пакетов принимаемых и отсылаемых данных. За всем на http://www.icqinfo.ru. 
Кстати есть вопрос по этой теме. Кто-нить знает по какому принципу запрашивается картинка для регистрации нового UIN, кроме  того не возбраняются ссылки на протоколы ICQ старше 8 (не включительно), желательно на 11.
uid0gid0, надеюсь не в обиде за эксплуатацию твоей темы???smile  

Автор: Nil 7.6.2007, 21:03
Aleksiem
Цитата

Кто-нить знает по какому принципу запрашивается картинка для регистрации нового UIN

Очень просто. https://www.icq.com/register - там https протокол и все довольно-таки просто используя curl пишется за 15 мин.
----
Меня сейчас другое интересует, кто-нибудь может на данный момент сказать какой протокол последний ?..
Или хотя бы программа по какому протоколу написанная будет работать на нынешнем сервере icq ?..
Максимум нашел документацию по 9 версии[http://iserverd.khstu.ru/oscar/] все понятно, но стоит ли браться если не уверенности что протокол не устарел?..
Никак не пойму, OSCAR же вообще вроде закрытый протокол ?.. Откуда альтернативные клиенты и полные спецификации по каким-то его версиям берутся ? Реверс инженеринг ? 0_о Это же ужас, особенно snac'и

Автор: BlackStar 8.6.2007, 10:01
А может будет проще написать плагин к Миранде?

Автор: Santilka85 18.7.2007, 10:23
А вообще автор темы по-моему сказал с какой прогой ему надо работать. Зачем тада другие человеку предлагать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)