vyuka:cviceni:y36sps:semestralky:michao1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vyuka:cviceni:y36sps:semestralky:michao1 [2009/05/14 14:08] michao1vyuka: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í**: ''Program, pro podporu debugu k programu webcommunicator+**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. 
 +            
  
-            Program bude odchytávat tcp pakety a bude z nich vyčítat commandy a jejich vlastnosti.''+**Řešení**:
  
-**Schválení**NE+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 : 
 + 
 +{{:vyuka:cviceni:y36sps:semestralky:michao1.jpg| Screenshot}} 
 + 
 +Prezentace programu : 
 + 
 +{{:vyuka:cviceni:y36sps:semestralky:michao1.pdf| Prezentace}} 
 + 
 +Zdrojový kód ( Projekt ve visual studiu 2008 ) : 
 + 
 +{{:vyuka:cviceni:y36sps:semestralky:michao1.zip| Zdrojový kód}}
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  
  • vyuka/cviceni/y36sps/semestralky/michao1.1242310126.txt.gz
  • Last modified: 2009/05/14 14:08
  • by michao1