Giter Site home page Giter Site logo

my-ospf-sniffer's Introduction

My OSPF Sniffer

V programu nebyla implementovana zadna rozsireni, vypis odposlechnutych informaci ma format odpovidajici programu wireshark a vypis databaze LSA odpovida formatu na zarizenich firmy Cisco.

Program je spustitelny na operacnich systemech FreeBSD a Linux. Pro preklad na operacnim systemu FreeBSD pouzijte GNU Make bez parametru.

> gmake

Pro preklad na operacnim systemu Linux je potreba dodat parametr linux.

> make linux

Pro dalsi nastaveni chovani programu je mozne zmenit definice v hlavickovem souboru const.h. Popis definic je mozne najit v dokumentaci.

@z tohoto souboru byla pro kompatibilitu odstranena diakritika

ArticleTitle

Úvod

Cílem projektu bylo implementovat aplikaci pro odposlech OSPF zpráv podporující IPv4 a IPv6 LSA topologické informace a po ukončení tohoto programu i exportér OSPFv3 LSA topologických informací. Aplikace je implementována v programovacím jazyku C pro prostředí FreeBSD/Linux.

Směrovací protokoly

Směrovací protokoly zahrnují sadu procesů, datových struktur, algoritmů a zpráv, které slouží k přenosu informací mezi směrovači. Umožňují tak směrovači se autonomně rozhodnout o tom, na který výstup odešle zprávy, které nejsou určeny pro zařízení k němu přímo připojená, ale pro zařízení, ke kterým pomocí směrovacích protokolů získal cestu.

Směrovací protokoly se rozdělují na Distance Vector a Link State protokoly. Distance Vector protokoly jsou vhodné pro menší sítě, ve kterých není potřeba znát síťovou topologii. Pro výpočet nejlepší cesty používají Bellman-Fordův algoritmus a mezi typické zástupce patří protokoly RIPv1, RIPv2, IGRP, EIGRP. Oproti tomu Link State protokoly vytváří kompletní pohled na topologii sítě a umožňují tak efektivnější směrování v rozsáhlejších sítích.

OSPF

Open Shortest Path First, neboli zkráceně OSPF je Link State směrovací protokol využívající Dijkstrova algoritmu stejného názvu. Byl vyvinut jako náhrada protokolu RIP, zahrnuje koncept oblastí a pomocí výše zmíněného algoritmu vytváří kompletní topologii sítě. To mu umožňuje nasazení ve větších, hierarchicky strukturovaných sítích s možností pozdějšího růstu.

Protokol za svou dobu prošel několika inovacemi. Původní OSPFv1 byl pouze experimentální, ktežto OSPFv2, který byl vyvinut Johnem Moyem v roce 1991 se dočkal okamžitého nasazení na poli počítačových sítí. Nejnovější revize OSPFv3 zahrnuje podporu IPv6 a zjednodušuje některé ze zpráv, které používá jeho předchůdce.

Typy zpráv protokolu OSPF

Následující tabulka uvádí typy zpráv protokolu OSPFv2 a OSPFv3.

Kód zprávy
Typ zprávy
Popis
0x01
Hello
Slouží k objevení sousedů a navázání spojení mezi směrovači.
0x02
Database Description
Obsahuje zkracený seznam databáze směrovacích informací.
0x03
Link-State Request
Požadavek na směrovací informace.
0x04
Link-State Update
Odpověď na požadavek obsahující směrovací informace.
0x05
Link-State Acknowledgment
Potvrzení příjmu směrovacích informací.

Databázové informace

Informace o databázi směrovače jsou distribuovány ve formě zpráv Link-State Advertisments (LSA), které jsou obsaženy ve zprávě typu Link-State Update. Zde jsou již typy zpráv různých revizí více odlišné. V následující tabulce jsou uvedeny typy zpráv a jejich popis pro OSPFv3.

Kód zprávy
Typ zprávy
Popis
0x2001
Router-LSA
Popis stavu a metriky rozhranní směrovače.
0x2002
Network-LSA
Popis všech směrovaču připojených k danému spoji.
0x2003
Inter-Area-Prefix-LSA
Popis cest a prefixů v jiných oblastech.
0x2004
Inter-Area-Router-LSA
Původcem těchto zpráv jsou hraniční směrovače informující ostatní hraniční směrovače v jiných oblastech o vnitřních cestách.
0x4005
AS-External-LSA
Slouží pro popis implicitní cesty.
0x2006
Neschváleno
0x2007
NSSA-LSA
Vysílány hraničními směrovači k popisu vzdálených lokací mimo autonomní systém.
0x0008
Link-LSA
Pro každý fyzický spoj je generána zpráva tohoto typu, která poskytuje informace směrovačům na daném spoji o adresách typu link-local a prefixech.
0x2009
Intra-Area-Prefix-LSA
Určeno pro šíření informací o prefixech spojených s místní adresou směrovače, síťovým segmentem, nebo připojeným tranzitním síťovým segmentem.

Popis programu

Program zachytává zprávy na naslouchaném ethernetovém rozhranní v promiskuitním módu a vypisuje informace v nich obsažené. Tyto informace zahrnují výpis hlavičky ethernetového rámce, výpis hlavičky IP packetu a dále hlavičku, typ zprávy popř. další doplňující informace OSPF ve zprávě obsažené. Po ukončení programu zasláním signálu SIGINT je programem vypsána OSPFv3 topologie z odposlechnutých zpráv.

Spuštění

Pro spuštění je potřeba programu pomocí parametru zadat rozhranní, na kterém bude naslouchat pomocí přepínače –i následujícím způsobem :

./myospfsniffer –i eth1 ,kde eth1 je rozhranní, na kterém se bude naslouchat. Pro výpis nápovědy je možné použít přepínač –h.

Implementace

Moduly

Program je rozčleněn do několika modulů :

  • sys - obsahuje funkce pro tisk nápovědy, ethernetových a ip hlaviček a dále funkce pro tisk IPv4 a IPv6 adres a jejich prefixů
  • const - definice kostant použitých v programu
  • binary - makro pro převod čísla z binární reprezentace do reprezentace programovacího jazyka C
  • ospfv2 - struktury a funkce pro výpis OSPFv2 informací
  • ospfv3 - struktury a funkce pro výpis OSPFv3 informací
  • ospfv3_db - struktury a funkce pro záznam a výpis OSPFv3 topologie
  • main - samotný program

Logické části programu

Odposlech zpráv na rozhranní

Pro odposlech byla použita knihovna libpcap, bez použití filtrace, což umožnilo zpracovat přijaté zprávy přímo v programu a vypsat tak přesné pořadové číslo tak, jak to dělá například program Wireshark. Pro použití filtru je však možné změnit definici FILTER_EXP, v hlavičkovém souboru main.h. Stejně tak je možné zapnout/vypnout výpis ladících informací pomocí definice DEBUG, v hlavičkovém souboru const.h. Seznam dalšího nastavení překladu programu je obsažen v příloze 1.

Zpracování

O zpracování zprávy se stará funkce got_packet, která postupně rozlišuje struktury zprávy dle jejího typu (IPv4/IPv6, OSPF typy zpráv), vypisuje celé tyto struktury na standartní výstup a ukládá relevantní informace do databáze za použití dříve uvedených modulů. Formát výpisu zprávy lze změnit pomocí změny definic ETHERNET_FORMAT, IP_FORMAT, OSPF_HEADER_FORMAT, OSPF_TYPE_FORMAT, OSPF_LSA_HEADER_FORMAT a OSPF_LSA_FORMAT.

Tisk LSA

Je vhodné zmínit funkce pro tisk print_ospf2_lsa a print_ospf3_lsa. Tyto funkce přijímají jako parametr ukazatel na hlavičku LSA části OSPF zprávy, samostatně pak rozlišují typ předaného LSA a prostřednictvým pomocných funkcí tisknou LSA na standartní výstup. Problém nastává u struktur zprávy, které nemají přesně danou velikost jako například pole prefix u OSPFv3 Inter-Area-Prefix LSA, kde je nutné tuto velikost zjistit a pracovat s pamětí pouze v rozsahu zprávy. Dále se ve zprávách vyskytují pole, která se mohou opakovat. Je opět nutné ze zprávy zjistit počet opakování a tisknout pouze relevantní informace.

Databáze topologických informací

Databáze topologických informací je rozčleněna do několika struktur. Je vhodné rozlišovat informace od různých směrovačů, jejichž informace byla na rozhranní odposlechnuta a dále identifiční číslo instance procesu OSPF, která dané informace ze směrovače vyslala. LSA informace mohou patřit do různých oblastí a mohou být různého typu, což je potřeba pro efektivní prohledávání databáze také rozlišit. Vzhledem k tomu, že předem nevíme kolik routerů/instancí/oblastí budou odposlechnuté zprávy obsahovat, byly pro implementaci databáze zvoleny jednosměrně vázané seznamy. Na následujícím diagramu je znázorněna struktura databáze.

Obr. 1 – Struktura Databáze

Topologická databáze je po zaslání signálu SIGINT celá vytištěna na standartní výstup ve formátu blížícímu se výpisu topologické databáze na směrovačích Cisco.

Použitá Literatura

  • RFC5340, RFC2328
  • Přednášky CCNA2

Metriky projektu

3061 řádků kódu

Příloha – Parametry překladu programu

Program je spustitelný na operačních systémech FreeBSD a Linux. Pro překlad na operačním systému FreeBSD použijte GNU Make bez parametrů.

> gmake

Pro překlad na operačním systému Linux je potřeba dodat parametr linux.

make linux

V následující tabulce jsou uvedena různá nastavení programu, kterými lze změnit chování programu.

Nastavení
Popis
PRINT_IP
výpis IP hlaviček
PRINT_ETHERNET
výpis Ethernetových hlaviček
PRINT_PACKET_NUMBER
výpis pořadového čísla packetu
PRINT_OSPF_NUMBER
výpis pořadového čísla OSPF zprávy
IP_PRETTY_PRINT
zapne výpis zkraceného tvaru IP adres a prefixů
DEBUG
zapne výpis ladících zpráv
ETHERNET_FORMAT
odsazení výpisu Ethernetové hlavičky
IP_FORMAT
odsazení výpisu IP hlavičky
OSPF_HEADER_FORMAT
odsazení výpisu OSPF hlavičky
OSPF_TYPE_FORMAT
odsazení výpisu OSPF zprávy (Hello, DBU, ...)
OSPF_LSA_HEADER_FORMAT
odsazení výpisu LSA hlavičky
OSPF_LSA_FORMAT
odsazení výpisu LSA zprávy
PRINT_LLS
zapne výpis LLS bloku

Tato nastavení se provádějí změnou definic v hlavičkovém souboru const.h.

my-ospf-sniffer's People

Contributors

knapovsky avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.