Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
vyuka:cviceni:y36sps:semestralky:michao1 [2009/04/28 07:46] – vytvořeno michao1 | vyuka:cviceni:y36sps:semestralky:michao1 [2009/06/06 09:09] (current) – michao1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Ondřej Michalčík ====== | ====== Ondřej Michalčík ====== | ||
- | **Zadání**: | + | **Zadání**: |
+ | 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:// | ||
+ | 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. | ||
+ | | ||
- | **Schválení**: NE | + | **Ř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, | ||
+ | |||
+ | mainSocket.Bind(new IPEndPoint(IPAddress.Parse(cmbInterfaces.Text), | ||
+ | |||
+ | mainSocket.SetSocketOption(SocketOptionLevel.IP, | ||
+ | SocketOptionName.HeaderIncluded, | ||
+ | true); | ||
+ | |||
+ | mainSocket.IOControl(IOControlCode.ReceiveAll, | ||
+ | |||
+ | mainSocket.BeginReceive(byteData, | ||
+ | new AsyncCallback(OnReceive), | ||
+ | |||
+ | |||
+ | 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 : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Prezentace programu : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Zdrojový kód ( Projekt ve visual studiu 2008 ) : | ||
+ | |||
+ | {{: | ||
~~DISCUSSION~~ | ~~DISCUSSION~~ | ||