vyuka:cviceni:y36sps:semestralky:michao1

Ondřej Michalčík

Zadání: Program, pro podporu debugu k programu webcommunicator.

            Webcommunicator je program podobny ICQ, ktery je napsany v C#, a pres ktery 
            mezi sebou komunikuji klienti. Komunikace probiha pomoci command patternu, tzn. jednotlive zpravy, stavy a registrace probihaji tak ze 
            se pres sit posilaji serializovane objekty (commandy). Vice o programu webcommunicator na http://webcommunicator.clearwiki.com/.
            Prihlasovaci udaje jsou login: lordondrak@donory.cz a heslo: ondrak1.  
            Program bude odchytávat tcp pakety a bude z nich vyčítat commandy a jejich vlastnosti.
            Program bude v grafickem uzivatelskem rozhrani zobrazovat jednotlive commandy, ktere si mezi sebou posilaji klient se serverem.
          

Řešení:

Program je napsán v programovacím jazyku C#. Program pracuje tak, že před startem odposlouchávání se nastaví IP adresa a port na rozhraní, které chceme odposlouchávat. Poté se vytvoří socket a začne odposlouchávat. Když přijme paket, zavolá se asynchroně metoda OnReceive, která tento paket zpracuje.

mainSocket = new Socket(AddressFamily.InterNetwork,
                      SocketType.Raw, ProtocolType.IP);
mainSocket.Bind(new IPEndPoint(IPAddress.Parse(cmbInterfaces.Text), 0));
mainSocket.SetSocketOption(SocketOptionLevel.IP,
                      SocketOptionName.HeaderIncluded,
                      true);
mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);
mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                      new AsyncCallback(OnReceive), null);

Zpracování paketu vypadá tak, že se nejdřív zjistí, jestli tento paket je TCP, poté jestli zdrojová IP adresa nebo cílová IP adresa je ta, kterou jsme si nastavili, pak jestli zdrojový nebo cílový port je ten, který chceme. Když paket všemi těmito kontrolami projde, tak se program podívá na příznak.Pokud je příznak PSH,ACK tak z paketu vyjme data a zkopíruje si je do bufferu. Takto plní pole dokud od stejného zdroje, který začal posílat data nedostane paket s příznakem FIN,ACK. Až takový paket dostane, tak do bufferu sehraje jestě data od tohoto paketu a pak tento buffer deserializuje na command, který poté zobrazí do příslušho místa v hlavním okně. Program dále obsahuje třídy IPHeader a TCPHeader, které slouží pouze k tomu aby jsme paket (pole bytů), který nám přišel rozřezali na hlavičku a data a v hlavičce vyčetli typ paket, dále délku, flagy, TTL atd. K programu je připojena dll knihovna, která byla použita u programu webcommunicator a slouží k tomu aby program věděl jak má deserializovat command a co tento command má obsahovat.

Tady je screenshot jak vypadá program v provozu :

 Screenshot

Prezentace programu :

Prezentace

Zdrojový kód ( Projekt ve visual studiu 2008 ) :

Zdrojový kód

~~DISCUSSION~~

  • vyuka/cviceni/y36sps/semestralky/michao1.txt
  • Last modified: 2009/06/06 09:09
  • by michao1