3 Icq

Fiecare utilizator ICQ are o listă de persoane cu care vrea să comunice. Această listă poate crește. Pentru fiecare utilizator din lista de contacte, se afișează starea acestuia.







Protocolul ICQ vă permite să trimiteți nu numai mesaje, ci și fișiere. Din păcate, există câteva modificări ale standardului. În plus, trebuie să se țină seama de faptul că protocolul ICQ nu este public (drepturile aparțin companiei Mirabilis). Din acest motiv, descrierile date nu pot fi considerate oficiale și sunt date aici doar în scopuri educaționale. 1 prezintă schema generală a interacțiunii utilizatorului cu serverul și unul cu celălalt.

În Fig. Figura 3 prezintă formatul de cadru al versiunii ICQ 5.

Antetul pachetului ICQ (partea clientului)

Parametrii comenzii trimise

Fig. 3. Formatul cadrului pentru ICQv5

Primele două octeți caracterizează versiunea protocolului. Apoi, după patru octeți zero, urmează identificatorul unic al clientului UIN. După identificatorul sesiunii, urmează codul de comandă. În acest caz special, codul de codare pentru deconectare este 0xC2EE (ordine inversă de octeți). Câmpurile de sesiune ID și numerele de secvență (SEQ_NUM1, SEQ_NUM2) servesc în scopuri de securitate.

Contactul cu partenerul este stabilit prin conexiunea TCP. Toate celelalte comunicări sunt efectuate utilizând datagrame UDP trimise la serverul ICQ. Primirea tuturor datagramei UDP trebuie confirmată de destinatar. Dacă nu există confirmare în decurs de 10 secunde, apare o retransmisie. După 6 retransmisii de succes, mesajul B_MESSAGE_ACK este trimis. Procedura se repetă de 2 ori. Dacă nu se primește niciun răspuns, clientul ICQ este dezactivat.

Când utilizatorul trimite un mesaj / URL / etc unui alt utilizator care este conectat la server, clientul ICQ va stabili o conexiune TCP direct cu acest utilizator și va trimite mesajul utilizând un format similar (dar nu identic) utilizat la trimiterea pachetelor UDP. După trimiterea mesajului, conexiunea TCP nu este întreruptă, dar este stocată deschisă și utilizată pentru mesageria ulterioară. Conexiunea este închisă atunci când oricare dintre utilizatori deconectează conexiunea ICQ.







Toate șirurile de text încep cu un câmp de lungime de doi octeți. indicând numărul de octeți per linie. Orice linie din acest protocol se termină cu codul 00. Când citiți pachetele, orice informație poate fi utilizată pentru a determina lungimea șirului, dar când trimiteți, utilizați atât un câmp de lungime, cât și doi octeți nul. Toate liniile utilizează codificarea MS Windows, adică. setul de caractere ISO Latin-1 și șirurile de text sunt terminate de CR / LF. (Nu toate liniile pot conține pauze de linie.)

Câmpul VERSION este prezent în toate pachetele ICQ și identifică pachetul ca mesaj ICQ. Câmpul SEQ_NUM conține numărul de ordine al pachetului. Toate pachetele trebuie să aibă un număr secvențial unic (dacă aceasta nu este doar o retransmisie). Acest lucru se face pentru a evita confuzia în cazul în care pachetul UDP este pierdut sau duplicat. În mod normal, SECV_NUM a pachetului actual este egal cu + 1. Rețineți că serverul și clientul au o numerotare diferită, deci SEQ_NUM = 3 pachete trimise de server sunt diferite de SECV_NUM = 3 pachete trimise de client. Rețineți, de asemenea, că serverul începe numerotarea de la 00 00, iar clientul începe de la 01 00.

Mai jos este o listă de comenzi pe care clientul le poate trimite către server:

USER_OFFLINE (78 00) Utilizatorul din lista de contacte a ieșit offline

Conținut (dacă este dat)

UIN-ul utilizatorului care sa logat

USER_FOUND (8C 00) Înregistrarea utilizatorului care corespunde criteriilor de căutare

Conținut (dacă este dat)

Căutați un număr de serie

User UIN găsit

Lungimea lui NICK_NAME, inclusiv NULL

S-a găsit porecla utilizatorului cu terminarea NULL

Lungimea FIRST_NAME, inclusiv NULL

Numele de utilizator cu NULL final este găsit

Lungime LAST_NAME, inclusiv NULL

A fost gasit un nume de utilizator cu un NULL in urma

Lungimea E_MAIL, inclusiv NULL

Pentru fiecare utilizator care îndeplinește criteriile de căutare, USER_FOUND va fi trimis. Când toate USER_FOUND sunt trimise, serverul va trimite END_OF_SEARCH. Dacă utilizatorii care îndeplinesc criteriile de selecție nu sunt găsiți, END_OF_SEARCH va fi trimis imediat și nu va fi trimis niciun USER_FOUND. AUTORIZARE determină dacă utilizatorul permite unei persoane să includă pe cineva în lista de contacte. Valorile posibile ale AUTHORIZE sunt:

1 = Utilizatorul permite oricui să-i includă în lista de contacte

RECEIVE_MESSAGE (DC 00) Mesajul trimis prin server când clientul este offline

Conținut (dacă este dat)

Starea curentă a utilizatorului actual

Valoarea curentă a stării în STATUS este aceeași ca în STATUS_CHANGE (D8 04). Consultați STATUS_CHANGE pentru detalii.

Schimbul TCP este identic cu comunicarea cu UDP. Fiecare pachet trebuie să conțină lungimea pachetului (fără a include contorul de lungime). Codul de lungime durează două octeți. Cele mai multe mesaje conțin UIN-ul expeditorului.

CHANNEL_INIT Inițiază comunicarea inter-utilizator folosind TCP

Conținut (dacă este dat)







Trimiteți-le prietenilor: