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 arp.c
Příklady programů pro získání MAC adresy v OS Windows pomocí služeb Netbios adr_netbios.zip a SNMP 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_<prijmeni>_<prijmeni spoluautora>, 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~~