OPIS PROTOKOLU DC

Albert - Robert Żóralski - robertzor@pletwa.pl

NRSRCNAZWA I STRUKTURAOPIS
1 H $BadPass Informacja o tym że autoryzacja nie powiodła się (hasło przysłane poleceniem $MyPass nie jest poprawne).

Kierunek:
hub -> klient
Parametry:
|
1 J,O,H $ConnectToMe

Kierunek:

Parametry:
2 J $Direction

Kierunek:

Parametry:
3 J $FileLength Informacja o wielkości pliku, o który pytano poleceniem $Get (podczas bezpośredniego połączenia między klientami). Stąd klient ściągający dane, wie ile bajtów danych ma się spodziewać.

Kierunek:
klient -> klient
Parametry:
fileSize|
4 J,H $ForceMove Żądanie przekierowania na innego huba. Można zrobić balansowanie obciążenia ( 2 huby i przekierowania w zależności od ilości udostępnionych danych, pory dnia, lub osiedla z którego klient się łączy )

Kierunek:
hub -> klient
Parametry:
hubName|
5 J $Get Prośba o ściągnięcie, lub dociągnięcie pliku (podczas bezpośredniego połączenia między klientami). Drugi klient powinien odpowiedzieć komendą $FileLength, po czym wysyłamy komendę $Send wyzwalającą transfer danych.

Kierunek:
klient -> klient
Parametry:
fileName$startByte|
6 J,O $GetINFO Prośba o dane klienta. Hub analizuje pole nick i przesyła komendę do konkretnego klienta. Odbiorca powinien odpowiedzieć komendą $MyINFO.

Kierunek:
klient -> hub -> klient
Parametry:
nick senderNick|
7 J,O $GetNickList Prośba o przysłanie listy nicków podłączonych do huba. Hub odpowiada poleceniem $NickList oraz $OpList.

Kierunek:
klient -> hub
Parametry:
|
1 O,H $GetPass Prośba o autoryzcję (sprawdzanie prawa do nicka). W odpowiedzi klient przysyła polecenie $MyPass z hasłem.

Kierunek:
hub -> klient
Parametry:
|
8 J,O $Hello Informacja do wszystkich, że podłączył się nowy klient. Klienci powinni odpowiedzieć komendą $MyINFO przesyłając mu informacje o sobie (J).

Kierunek:
hub -> all
Parametry:
nick|
21 H $HubIsFull Wysyłane do klienta wtedy, gdy nie ma możliwości przekierowania, a hub jest już pełny.

Kierunek:
hub -> klient
Parametry:
|
9 J,H $HubName Informacja wysyłana przez huba do dopiero co podłączonego klienta.

Kierunek:
hub -> klient
Parametry:
hubName|
10 J,O,H $Key Odpowiedź klienta na polecenie $Lock (żądanie autentykacji). Klucz key jest wyliczany na podstawie algorytmu zaszytego w kliencie i pola salt przysłanego poleceniem $Lock.

Kierunek:
klient -> hub; klient <-> klient
Parametry:
key|
1 O,H $Kick Karne rozłączenie od huba. Tylko admin ma takie prawo.

Kierunek:
klient -> hub
Parametry:
nick|
11 J,O,H $Lock Żądanie autentykacji. Jest to zabezpieczenie utrudniające połączenie się do huba niekomercyjnym klientom. Na nasze szczęście algorytm wyliczania klucza został już złamany. :) W odpowiedzi klient powinien przysłać do huba komendę $Key z wyliczonym na podstawie salt kluczem. Autentykacja jest przeprowadzana również podczas bezpośredniego połączenia między klientami (sesja download) i to w obie strony. Długość salt jest zmienna (conajmniej 3 bajty - w (H) długość jest losowana z przedziału 50-100, a znaki spomiędzy '%' - 'z'), , natomiast privateKey nie jest w żadnym z analizowanych źródeł wykorzystywane.

Kierunek:
hub -> klient; klient <-> klient
Parametry:
salt Pk=privateKey|
1 O,H $LoggedIn Informacja o tym że autoryzacja powiodła się (hasło przysłane poleceniem $MyPass jest poprawne) i użytkownik został zalogowany na hubie.

Kierunek:
hub -> klient
Parametry:
|
12 J $MaxedOut

Kierunek:

Parametry:
1 O $MultiSearch

Kierunek:

Parametry:
13 J,O $MyINFO Informacja o sobie samym. Hub zapisuje sobie wszystkie parametry i rozsyła to polecenie do pozostałych klientów (dodając na początku $ALL - stąd wynika, że istnieje też wersja $MyINFO ale adresowana do konkretnego klienta).

Kierunek:
klient -> hub; hub -> all
Parametry:
nick description$ $connectionTypeF$email$sharedBytes$| (klient -> hub)
$ALL nick description$ $connectionTypeF$email$sharedBytes$| (hub -> all)
  • description - nic nie znaczący opis
  • connectionType - 56Kbps/33.6Kbps/28.8Kbps/Satellite/ISDN/DSL/Cable/LAN(T1)/LAN(T3)
  • F - jednobajtowa flaga (domyślnie \x01) - gdy bit 1 wyzerowany to klient znajduje się z firewallem (\x00).
  • email - adres (często pusty)
  • sharedBytes - liczba bajtów udostępnianych
  • 14 J $MyNick Informacja o nicku. Jest to pierwsze polecenie które jest wysyłane podczas bezpośredniego połączenia między klientami (sesja download).

    Kierunek:
    klient -> klient
    Parametry:
    nick|
    13 O,H $MyPass Odpowiedź na $GetPass czyli potwierdzenie prawa do nicka. Jeśli hasło się zgadza, to hub rozsyła do wszystkich $Hello z informacją, że jest nowy użytkownik. Jeśli jest to użytkownik z prawami admina, to hub rozsyła do wszystkich polecenia $LoggedIn oraz $Hello. Jeśli hasło jest niepoprawne, następuje rozłączenie klienta (O), lub wysłanie komendy $BadPass (H).

    Kierunek:
    klient -> hub
    Parametry:
    password|
    15 J,O $NickList Lista wszystkich nicków zalogowanych na hubie (bez rozróżnienia czy jest to admin, czy nie). Jest to odpowiedź serwiera na komendę $GetNickList. Zwracana lista nicków jest rozdzielona separatorem '$$'. Użytkownik z prawami admina widzi dodatkowo użytkownika HubSecurity (jako pierwszego na zwracanej liście).

    Kierunek:
    hub -> klient
    Parametry:
    nick1$$nick2$$nick3|
    4 O $OpForceMove Żądanie przekierowania użytkownika z prawami admina na innego huba. Trzeba by sprawdzić dokładnie to polecenie, bo jest ono potencjalnym 'słabym punktem'. ;) i można by się pokusić o prawa admina na hubach ogólnopolskich...

    Kierunek:
    hub -> klient
    Parametry:
    hubName|
    16 J,O $OpList Lista adminów zalogowanych na hubie. Jest to odpowiedź serwiera na komendę $GetNickList. Zwracana lista nicków jest rozdzielona separatorem '$$'. Użytkownik z prawami admina widzi dodatkowo użytkownika HubSecurity (jako pierwszego na liście).

    Kierunek:
    hub -> klient
    Parametry:
    nick1$$nick2$$nick3|
    17 J $Quit Eleganckie zakończenie połączenia. Hub usuwa nadawcę ze swojej listy, a następnie rozsyła polecenie $Quit do pozostałych klientów, żeby mogli również usunąć nadawcę ze swoich list.

    Kierunek:
    klient -> hub -> all
    Parametry:
    nick|
    18 J,O,H $RevConnectToMe

    Kierunek:

    Parametry:
    19 J,O,H $Search Wyszukiwanie pliku. Ze struktury wynika, że huby mogą przekazywać między sobą to polecenie.

    Kierunek:
    klient -> hub -> [hub] -> all
    Parametry:
    Hub:senderNick ifSize?ifLess?size?dataType?pattern|
  • ifSize - F gdy rozmiar pliku nie ma znaczenia, w przeciwnym razie T
  • ifLess - F gdy szukamy plików o rozmiarze większym od size, T - gdy mniejszych
  • size - rozmiar w bajtach
  • dataType - 1=any, 2=audio, 3=compressed, 4=document, 5=exe, 6=picture, 7=videos, 8=folder
  • 20 J $Send Polecenie wyzwalające potok danych podczas sesji download (między klientami). Wysyłane uprzednio polecenia $Get i $FileLength określają który plik jest przesyłany, od którego bajtu i jaka porcja danych jest transmitowana.

    Kierunek:
    klient -> klient
    Parametry:
    |
    21 J,O,H $SR

    Kierunek:

    Parametry:
    22 J,H $To Wysłanie wiadomości prywatnej ( na chacie DC ).

    Kierunek:
    klient -> hub -> klient
    Parametry:
    nick To: senderNick$<senderNick>message|
    23 J,H $ValidateNick Walidacja nicka. Wysyłana do huba zaraz po $Key (czyli na początku połączenia). Hub sprawdza czy nick nie jest już zajęty lub zabanowany. W nicku nie mogą wystąpić znaki ' ' oraz '$'. Jeśli nick jest chroniony haslem to wysyłane jest polecenie $GetPass po to by potwierdzić prawo do korzystania z nicka (O). Hub rozsyła $Hello do wszystkich klientów informując ich, że podłączył się nowy użytkownik (O).

    Kierunek:
    klient -> hub
    Parametry:
    nick|
    24 J,H $Version Informacja o wersji klienta. Nie ma w tej chwili żadnego zastosowania.

    Kierunek:
    klient -> hub
    Parametry:
    clientVersion|