Cieľom projektu bolo navrhnúť a vytvoriť sieťový analyzátor, ktorý bude schopný zachytávať a analyzovať sieťovú komunikáciu na základe zadaných filtrov.
- IPK Projekt 2 - ZETA: Network sniffer
Sniffer je nástroj navrhnutý na sledovanie a analýzu sieťovej prevádzky. Jeho hlavnými funkčnosťami sú zachytávanie, analyzovanie a zobrazovanie sieťových paketov, ktoré prechádzajú cez vybrané sieťové rozhranie. Sniffer umožňuje užívateľom monitorovať komunikáciu medzi rôznymi zariadeniami v sieťovej infraštruktúre a poskytuje dôležité informácie o prenášaných dátach, ako sú zdrojové a cieľové IP adresy, MAC adresy alebo porty.
Program.cs:
Predstavuje vstupný bod programu. Vo funkcii ParseArguments sa spracujú a skontrolujú argumenty.
Ak bol zadaný len argument -i bez hodnoty alebo nie je zadaný žiadny argument, program vypíše všetky aktívne rozhrania.
Ak bol zadaný argument -i s hodnotou, program začne zachytávať pakety na zadanom rozhraní.
Počet paketov, ktoré sa majú zachytiť, je daný argumentom -n.
Ak ten však nie je zadaný, program spracuje len jeden paket a ukončí sa.
Všetky daľšie argumenty predstavujú filtre, ktoré sa aplikujú na zachytené pakety.
Sniffer.cs:
Sniffer.cs je hlavný modul implementujúci funkcionalitu pre zachytávanie, analýzu a zobrazovanie sieťových paketov, ktorý poskytuje dôležité informácie o prenášaných dátach.
StartSniffer je hlavnou metódou sniffera, ktorá identifikuje a otvorí vybrané sieťové zariadenie na zachytávanie paketov,
aplikuje definované filtre na zachytávané pakety a sleduje a spracováva zachytené pakety až do dosiahnutia požadovaného počtu alebo prerušenia.
AddFilters je metóda zodpovedná za pridávanie filtrov na základe zadaných kritérií, ako sú protokoly (TCP, UDP, ARP, ICMP) a porty.
Na základe zadaných filtrov potom vytvorí reťazec, ktorý sa aplikuje na zachytené pakety.
Metóda PrintPacket je zodpovedná za formátovanie a zobrazovanie informácií o zachytených paketoch, ktorá extrahuje údaje ako zdrojová a cieľová MAC adresa, IP adresy, porty a dĺžku rámca a rozhoduje o formáte zobrazenia v závislosti na obsahu paketu.
PrintActiveInterfaces je metóda zobrazujúca zoznam dostupných sieťových rozhraní na výber.
V tejto časti sa zameriam na podrobnú analýzu a vysvetlenie niektorých kľúčových častí programu.
while (!_ctrlCPressed && _processedPackets < opts.PacketCount)
{
PacketCapture e;
var status = device.GetNextPacket(out e);
if (status != GetPacketStatus.PacketRead)
continue;
RawCapture rawCapture = e.GetPacket();
Packet packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
PrintPacket(packet, rawCapture);
_processedPackets++;
}Cyklus slúži na zachytávanie a spracovávanie sieťových paketov, kým nie je dosiahnutý maximálny počet spracovaných paketov
alebo pokiaľ užívateľ nezruší program stlačením klávesového skratu pre prerušenie.
V každom cykle sa pomocou metódy GetNextPacket získa nasledujúci paket zo zariadenia, ktorý sa následne spracuje a zobrazí pomocou metódy PrintPacket.
Po implementácii funkcionality sniffera som vykonal testovanie na overenie jeho správneho fungovania. Testovanie prebiehalo nasledovne: Najprv som definoval testovací scenár, v ktorom som simuloval rôzne typy sieťových aktivít, ako sú prenosy TCP a UDP, ARP požiadavky, ICMP a pingy. Tento scenár zahŕňal rôzne kombinácie a typy paketov, ktoré sa mali zachytiť a analyzovať. Potom som spustil sniffer na vybranom sieťovom rozhraní a nastavil som filtre podľa potreby, aby som zachytil iba relevantné pakety pre daný testovací scenár. Po spustení sniffera som začal generovať sieťovú aktivitu z iných zariadení alebo pomocou simulačných nástrojov na vyvolanie požadovaných udalostí. Sniffer postupne zachytával prichádzajúce pakety na základe zadaných filtrov. Po zachytení paketov som ich analyzoval pomocou funkcionalít poskytovaných snifferom. Kontroloval som, či sú zobrazované správne informácie o zdrojových a cieľových adresách, typoch paketov, veľkosti rámca a ďalších relevantných údajoch. Paralelne s testovaním pomocou sniffera som rovnakú sieťovú aktivitu sledoval aj pomocou nástroja Wireshark. Porovnával som výstupy sniffera s výstupmi z Wiresharku, aby som overil presnosť a konzistentnosť zachytených informácií. Ak som zistil nezhody medzi výstupmi sniffera a Wiresharku alebo ak som identifikoval chyby vo funkcionalite sniffera, vykonával som potrebné úpravy a opravy na základe týchto zistení. Po opravách a úpravách som opäť spustil testovanie a zopakoval som predchádzajúce kroky na overenie, či sú vykonané zmeny účinné a či sniffer funguje správne a spoľahlivo.
[RFC792] Postel, J., ed., "Internet Control Message Protocol," RFC 792, September 1981. [cited 2024-04-16]. Available at: https://www.rfc-editor.org/rfc/rfc792.html
[RFC4443] Conta, A. and Deering, S., "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification," RFC 4443, March 2006. [cited 2024-04-16]. Available at: https://www.rfc-editor.org/rfc/rfc4443.html
[RFC826] Plummer, D., "An Ethernet Address Resolution Protocol," RFC 826, November 1982. [cited 2024-04-16]. Available at: https://www.rfc-editor.org/rfc/rfc826.html
[RFC5952] Kawamura, S. and Kawashima, M., "A Recommendation for IPv6 Address Text Representation," RFC 5952, August 2010. [cited 2024-04-16]. Available at: https://www.rfc-editor.org/rfc/rfc5952.html
[RFC3339] Klyne, G. and Newman, C., "Date and Time on the Internet: Timestamps," RFC 3339, July 2002. [cited 2024-04-16]. Available at: https://www.rfc-editor.org/rfc/rfc3339.html
