Detail zadání

Předmět:
    ISA - Síťové aplikace a správa sítí
Ak. rok:
    2025/2026
Název:
    Přenos souboru skrz skrytý kanál (Dr. Grégr) 
Vedoucí:
    Ing. Matěj Grégr, Ph.D.
Popis:

    Vytvořte klient/server aplikaci, která umožní přenést soubor skrz skrytý kanál, kde data jsou přenášena uvnitř ICMP/ICMPv6 Echo-Request/Response zpráv. Soubor musí být před přenosem zašifrován, aby nebyl přenášen v textové podobě.

    Spuštění aplikace:
    secret -r <file> -s <ip|hostname> [-l]

        -r <file> : specifikace souboru pro přenos, může být zadán i s cestou (např. secret -r ../test.file)
        -s <ip|hostname> : ip adresa/hostname na kterou se má soubor zaslat
        -l : pokud je program spuštěn s tímto parametrem, jedná se o server, který naslouchá příchozím ICMP zprávám a ukládá soubor do stejného adresáře, kde byl spuštěn.

    Upřesnění zadání:
    Program zpracuje vstupní argumenty, načte soubor, zašifruje ho a zašle skrz ICMP zprávy na zvolenou IP adresu, kde program, spuštěný v listen (-l) módu, tyto zprávy zachytí, dešifruje a soubor uloží na disk.

        Program může používat pouze ICMP/ICMPv6 zprávy Echo-request/reply.
        Pro správné chování bude třeba definovat protokol pro přenos dat. (např. je třeba zaslat jméno souboru, ověřit, že soubor byl přenesen celý, apod.) Tento protokol je na vašem uvážení a definujte ho v rámci dokumentace.
        Jako šifru použijte AES, dostupnou např. pomocí knihovny openssl [1]. Jako klíč použijte svůj login.
        Program se musí vypořádat se souborem větší, jak max. velikost paketu na standardní síti (1500B), tj. musí být schopen větší soubor rozdělit na více paketů.
        Můžete uvažovat, že v rámci přenosu nedojde ke ztrátám paketů. Pokud implementujete formu spolehlivého přenosu, uveďte to v dokumentaci.
        Při vytváření programu je povoleno použít hlavičkové soubory pro práci se sokety a další obvyklé funkce používané v síťovém prostředí (jako je netinet/*, sys/*, arpa/* apod.), knihovny pro práci s vlákny (pthread), pakety (pcap), signály, časem, stejně jako standardní knihovnu jazyka C (varianty ISO/ANSI i POSIX), C++ a STL a knihovnu SSL. Další knihovny nejsou povoleny.

     

    Dokumentace:

    Soubor Readme z obecného zadání nahraďte souborem secret.1 ve formátu a syntaxi manuálové stránky - viz https://liw.fi/manpages/

    Dokumentaci ve formátu pdf vytvořte dle pokynu v obecném zadání.

    Doplňující informace k zadání

        Před odevzdáním projektu si důkladně pročtěte společné zadání pro všechny projekty.
        Jakékoliv rozšíření nezapomeňte zdůraznit v manuálové stránce a v dokumentaci. Není však možné získat více bodů, než je stanovené maximum.
        Program se musí vypořádat s chybnými vstupy.
        Veškeré chybové výpisy vypisujte srozumitelně na standardní chybový výstup.
        Pokud máte pocit, že v zadání není něco specifikováno, popište v dokumentaci vámi zvolené řešení a zdůvodněte, proč jste jej vybrali.
        Při řešení projektu uplatněte znalosti získané v dřívějších kurzech týkající se jak zdrojového kódu (formátování, komentáře), pojmenování souborů, tak vstřícnosti programu k uživateli.

    Referenční prostředí pro překlad a testování

    Program by měl být přenositelný. Referenční prostředí pro překlad bude server merlin.fit.vutbr.cz (program zde musí být přeložitelný). Vlastní testování může probíhat na jiném počítači s nainstalovaným OS GNU/Linux, včetně jiných architektur než Intel/AMD, jiných distribucí, jiných verzí knihoven apod. Pokud vyžadujete minimální verzi knihovny, jasně tuto skutečnost označte v dokumentaci a v manuálové stránce.

    [1] https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption
