====== X36LOS: Úloha 1 ====== Pomocí programů na odchyt a záznam síťové komunikace (packet sniffer) zaznamenejte relaci níže zadaného typu, kterou budete dále analyzovat. Zadání má dvě části: **společnou** a **specifickou**. ===== I. - Společná část ===== První stupeň analýzy: Napište program, který analyzuje vaši relaci na úrovni TCP spojení (přes L2, IP k TCP - **nepoužívat filtr z pcapu**). Vstupem programu bude záznam síťové komunikace ve formátu tcpdump, výstupem bude - Soubor obsahující již jen vlastní data (data streams) vaší relace bez hlaviček paketů, poskládaná z příslušných TCP paketů. Formát souboru si určete sami. - Soubor s textovým výpisem informací o daném TCP spojení. Výpis bude obsahovat hlavičky jednotlivých TCP packetů (patřících do téhož spojení) v lidsky čitelné formě. Soustřeďte se především na typy paketů (SYN, SYN-ACK, ACK) a hodnoty čítačů relace. Ve výpisu budou vyznačeny (vloženým řádkem s příslušnou zprávou) zajímavé okamžiky: - jednotlivé fáze navazování spojení (pro kontrolu použijte jednoduchý stavový automat) - jednotlivé fáze ukončování spojení (pro kontrolu použijte jednoduchý stavový automat) - ztráta paketu či potvrzení (tj. opakování dat) (vyskytne-li se) - fragmentované pakety (vyskytnou-li se) - hodnotu MSS (maximum segment size) - vypsat hodnotu MSS Výpis bude také obsahovat hlavičku udávající IP adresy a čísla IP portů obou komunikujících stran relace. Program bude zpracovávat jen jednu zadanou relaci. Relace může být zadána na příkazové řádce jako adresy a porty komunikujících stran. Budou-li ve vstupním souboru i pakety patřící do jiné relace, musí být ignorovány. Poznámka: Prosím dodržte formát vstupního souboru (libpcap). Jako ověření funkčnosti Vašeho programu můžete dostat ke zpracování data odchytnutá někým jiným. ==== Nutné předpoklady ==== * program bude mít následující syntaxi: ''./analyzer soubor.vstup IP1 port IP2 port'', kde ''analyzer'' je název vaší binárky, ''soubor.vstup'' je název vstupního souboru s TCP streamem, ''IP1'' je zdrojová adresa TCP streamu a ''IP2'' je cílová adresa TCP streamu. * program půjde spustit i jinde než jen ve Vašem připraveném prostředí (tzn. předvádět můžete klidně na notebooku, ale musíte ho umět rozchodit i někde jinde) ===== II. - Specifická část ===== Druhý stupeň analýzy: Napište program, který analyzuje vaši relaci na úrovni příslušného aplikačního protokolu. Vstupem je výstupní datový soubor z 1. fáze analýzy, výstupem je textový soubor, popisující průběh relace "v lidsky čitelné" formě. ==== Možné aplikační protokoly ==== (výběr je ponechán zcela na Vaší fantazii - zde uvedené berte jako možné volby) 1. **FTP** řídící relace Výstupem bude text jednotlivých příkazu a odpovědí včetně vyznačeného směru. Př.: >>> USER abcd <<< 200 OK >>> PASS xyz <<< 200 OK atd... 2. **FTP** datová relace Výstupem bude celý prenášený soubor nebo data (napr. výstup příkazu DIR, LS). 3. **HTTP** relace Výstupem budou 3 soubory: HTTP požadavek, hlavička HTTP odpovědi, a vlastní přenášený soubor. (Předpokládáme požadavek typu GET.) 4. **TELNET** relace Výstupem bude text relace včetně vyznačeného směru. Př.: <<< Username: >>> a <<< a (tohle je echo napsaných písmen) >>> b >>> b (opět echo) ... Pokud TELNET relace obsahuje vyjednávání jednotlivých nastavení (TELNET options), uveďte také odpovídající výzvu i odpověď v textové (lidsky čitelné) podobě. 5. **SMTP** relace Výstupem bude text jednotlivých příkazu a odpovědí včetně vyznačeného směru. Př.: Obdobný jako u zadání č.1 6. **POP3** relace Výstupem bude text jednotlivých příkazu a odpovědí včetně vyznačeného směru. Př.: Obdobný jako u zadání č.1 Vítaným (~ bodově ohodnoceným) rozšířením práce jsou různá vylepšení. Třeba statistické údaje, časové závislosti, různé dynamické změny parametrů ... Pro odchyt paketů použijte programy [[http://www.wireshark.org|Wireshark]] (linux/windows), nebo [[http://www.tcpdump.org|tcpdump]] (linux). tcpdump spusťte s parametry: tcpdump -s 1530 -w (jmeno_dump_souboru) K ulehčení analýzy souboru použijte knihovny [[http://winpcap.polito.it/|WinPcap]], resp. [[http://www.tcpdump.org/|libpcap]]. ===== Odkazy ===== * [[http://wiki.wireshark.org/SampleCaptures]] - různě síťové toky zachycené wiresharkem * [[http://www.networksorcery.com/enp/topic/ipsuite.htm]] - podrobný popis jednotlivých protokolů * [[http://www.tcpdump.org/#documentation]] - dokumentace k TCPDUMPu (zvláště odkaz //Tutorial: Programming with pcap//) * [[http://security-freak.net/raw-sockets/raw-sockets.html]] - ukázka použití RAW socketů ===== Podmínky odevzdání ===== * Soubor s TCP session vám dá cvičící. To znamená, otestujte funkčnost vašeho programu na více vstupních souborech, abyste nebyli překvapeni, že program na jiných datech padá. * Ve zdrojovém souboru budou uvedené použité zdroje, pokud vycházíte ze starší úlohy tak musí být poznat co bylo hotové a co je vaše práce. * Odevzdání na service.felk.cvut.cz do vašeho projektového adresáře. * Uložit ve formě zkomprimovaného zip souboru, název bude ulohaX__, tzn. úlohy dělané ve dvojici budou na service uloženy dvakrát. * Odevzdávané úloze rozumí autor i spoluautor. ~~DISCUSSION~~