====== X36LOS: Úloha 2 ====== Navrhněte a implementujte program pracující nad rozhraním ovladačů síťové karty (Win), RAW socket (Linux), který si zjistí ip-adresu počítače pomocí BOOTP/DHCP protokolu (RFC951/RFC2131) a dále nabídne jednu z následujících služeb (většina nad UDP (RFC768) nebo ICMP (RFC792)). Implementujte zjednodušenou verzi IP (RFC791, RFC1071) bez fragmentace a IP-options. - DNS dotaz (RFC1035) (převod doménového jména na ip adresu, zjednodušený nslookup) - TFTP server (RFC1350) - TFTP klient (RFC1350) - Zjistí směrovací tabulku pomocí RIP protokolu (RFC1058) - Balíček serverů pro služby chargen/discard/echo/time - ICMP - ping klient a server (RFC792) - SNMP klient, který vrací a nastavuje SysOID, Location a SysContact - Další UDP protokoly ... Příklad programu pro linux posílající ARP dotaz {{vyuka:cviceni:x36los:arp.c|arp.c}} Příklady programů pro získání MAC adresy v OS Windows pomocí služeb Netbios {{vyuka:cviceni:x36los:adr_netbios.zip|adr_netbios.zip}} a SNMP {{vyuka:cviceni:x36los:adr_snmp.zip|adr_snmp.zip}}. Jelikož je přístup k RAW socketům omezen pouze na superuživatele, je potřeba v prostředí učebny K308 použít program zpřístupňující RAW sockety normálnímu uživateli. Aby bylo možné program používat, je nutné použít upravené jádro (volba Linux-cap při zavádění Linuxu). Program který chcete spustit s příslušnými právy uveďte jako parametr programu netcap. Tedy místo: arp eth0 147.32.81.174 147.32.81.175 spustíte: capnet arp eth0 147.32.81.174 147.32.81.175 Ukázka jak řešit například DNS dotaz: - Pomocí nástrojů operačního systému zjistím svoji MAC adresu na ethernetovém adapteru (S_MAC). - Vyšlu broadcastem DHCP/BOOTP požadavek. - Vrátí se mi nabídka IP adresy mé stanice, DNS serveru a výchozí brány (příjmu nabídku a zapamatuji si všechny údaje (S_IP, DNS_IP, GW_IP). - Zjistím, zda adresa DNS je ve stejném IP rozsahu jako moje IP, pokud ano pošlu ARP dotaz na DNS_IP, pokud ne pošlu dotaz na GW_IP. - ARP dotazem jsem zjistil MAC adresu, na kterou chci posilat dat (D_MAC, buď je to MAC výchozí brány nebo přímo DNS serveru). - Vytvořím správný DNS dotaz jako textový řetězec odpovídající RFC. - Kolem DNS dotazu přidám UDP hlavičku (důležitý je hlavně cílový port). - Kolem výsledného UDP paketu přidám IP hlavičku (zdrojová IP je ta moje S_IP, cílová IP je vždy zjištěná DNS_IP). - Kolem vytvořeného IP packetu přidám ethernetovou hlavičku, kde vyplňuji hlavně zdrojovou MAC adresu (S_MAC) z kroku 1 a cílovou MAC adresu (D_MAC zjištěná v kroku 5). - Tento packet odešlu přes RAW socket. ===== Podmínky odevzdání ===== 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 (bude vytvořen později). Uložit ve formě zkomprimovaného zip souboru, název bude ulohaX__, tzn. ulohy dělané ve dvojici budou na service uloženy dvakrát. Odevzdávané úloze rozumí autor i spoluautor. ===== Materiály ===== * [[http://security-freak.net/raw-sockets/raw-sockets.html]] - RAW socket HowTo * [[http://www.networksorcery.com/enp/topic/ipsuite.htm]] - podrobný popis jednotlivých protokolů ~~DISCUSSION~~