ˇ ´ vysoke ´ uc ˇen´ı technicke ´ v Praze Cesk e ´ Fakulta elektrotechnicka
´ PRACE ´ DIPLOMOVA Grafick´ a administrace poˇ c´ıtaˇ cov´ e s´ıtˇ e
Praha, 2014
Autor: Bc. Michal Hanzl´ık
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou diplomovou pr´aci vypracoval samostatnˇe a ˇze jsem uvedl veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ ym pokynem o dodrˇzov´an´ı etick´ ych princip˚ u pˇri pˇr´ıpravˇe vysokoˇskolsk´ ych z´avˇereˇcn´ ych prac´ı. Nem´am z´avaˇzn´ y d˚ uvod proti uˇzit´ı tohoto ˇskoln´ıho d´ıla ve smyslu § 60 Z´akona ˇc.121/2000 Sb. , o pr´avu autorsk´em, o pr´avech souvisej´ıc´ıch s pr´avem autorsk´ ym a o zmˇenˇe nˇekter´ ych z´akon˚ u (autorsk´ y z´akon).
V Praze dne podpis
i
ii
Podˇ ekov´ an´ı Dˇekuji pˇredevˇs´ım vedouc´ımu diplomov´e pr´ace Ing. Pavlu Strnadovi, Ph.D. za pomoc s realizac´ı t´eto diplomov´e pr´ace a tak´e Ing. Alexandru Mihnea Mouchovi, Ph.D., kter´ y pom´ahal konzultovat probl´emy, kter´e se vyskytly bˇehem m´e pr´ace. Dˇekuji tak´e rodinˇe a pˇr´atel˚ um za podporu pˇri pr´aci.
iii
iv
Abstrakt C´ılem t´eto pr´ace je zjistit, jak´e moˇznosti jsou pro vzd´alenou spr´avu zaˇr´ızen´ı MikroTik a jejich centr´aln´ı spr´avu s grafickou podporou. Hlavn´ım c´ılem je navrhnout a vytvoˇrit aplikaci, kter´a by dynamicky vykreslila topologii poˇc´ıtaˇcov´e s´ıtˇe postavenou na zaˇr´ızen´ıch MirkoTik. V t´eto pr´aci byly pops´any neighbor discovery protokoly (NDP) a moˇznosti grafick´e spr´avy poˇc´ıtaˇcov´e s´ıtˇe. Byly prostudov´any moˇznosti vzd´alen´e spr´avy zaˇr´ızen´ı MikroTik a na tomto z´akladˇe byla vytvoˇrena aplikace pro dynamick´e vykreslen´ı topologie poˇc´ıtaˇcov´e s´ıtˇe postavenou na zaˇr´ızen´ıch MirkoTik.
Abstract The goal of this work is to present the existing solutions for remote management of MikroTik devices via graphical interface (GUI). The main goal is to develop a better application which is able to detect and present in GUI the network topology. This work presents the class of Neighbour Discovery Protocols (NDP) and the ways a networks can be centrally managed via GUI. In this work the protocols for the remote management of MikroTik devices are presented and, based on those, the graphic tool for dynamically topology discover had been built.
v
vi
Obsah Seznam obr´ azk˚ u
ix
´ 1 Uvod
1
2 Souˇ casn´ y stav
2
2.1
2.2
2.3
2.4
Neighbor Discovery Protocol (NDP) . . . . . . . . . . . . . . . . . . . . . .
2
2.1.1
MikroTik Neighbor Discovery Protocol (MNDP)[2] . . . . . . . . .
2
2.1.2
Cisco Discovery Protocol (CDP)[22] . . . . . . . . . . . . . . . . . .
3
2.1.3
Link Layer Discovery Protocol (LLDP)[23] . . . . . . . . . . . . . .
4
2.1.4
Neighbor Discovery Protocol (NDP) v IPv6[24] . . . . . . . . . . .
4
Centr´aln´ı spr´ava s´ıtˇe s grafickou podporou . . . . . . . . . . . . . . . . . .
5
2.2.1
The Dude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.2
Cisco Packet Tracer . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2.3
Graphical Network Simulator (GNS3) . . . . . . . . . . . . . . . . .
7
2.2.4
Nagios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
Vzd´alen´a spr´ava zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.3.1
Telnet a SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.2
WebFig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.3
WinBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.4
API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
V´ ysledky a nedostatky existuj´ıc´ıch moˇznost´ı . . . . . . . . . . . . . . . . . 12
3 Implementace
13
3.1
Simulaˇcn´ı prostˇred´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3
Logick´a ˇca´st . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.1
Pˇripojen´ı k RouterOS . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3.2
RouterOS a rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 15 vii
3.4
3.3.3
Naˇc´ıt´an´ı u ´ˇct˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.4
Prohled´av´an´ı s´ıtˇe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.5
Z´ısk´an´ı rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.6
Z´ısk´an´ı IP adres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.7
Z´ısk´an´ı soused˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Grafick´a ˇca´st . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4.1
Dostupn´e grafick´e knihovny . . . . . . . . . . . . . . . . . . . . . . 25
3.4.2
NetBeans Visual Library . . . . . . . . . . . . . . . . . . . . . . . . 26
4 Testov´ an´ı
29
5 Vysledky a rozˇ s´ıˇ ren´ı aplikace
31
6 Z´ avˇ er
32
Literatura
32
A Seznam zkratek, znaˇ cek a symbol˚ u
36
B Tˇ r´ıda ArraySet<E >
38
C Diagramy
40
D N´ avod na propojen´ı GNS3 s PC
42
D.1 Nainstalov´an´ı program˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 D.2 Vytvoˇren´ı s´ıt’ov´eho pˇripojen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 42 D.3 Nastaven´ı projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 E Obsah pˇ riloˇ zen´ eho CD
46
viii
Seznam obr´ azk˚ u 2.1
Uk´azka programu The Dude . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2
Uk´azka programu Cisco Packet Tracer . . . . . . . . . . . . . . . . . . . .
6
2.3
Uk´azka programu GNS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.4
Uk´azka programu Nagios . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.5
Uk´azka rozhran´ı WebFig . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.6
Uk´azka rozhran´ı WinBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.1
Struktura komunikace pomoc´ı API . . . . . . . . . . . . . . . . . . . . . . 16
3.2
Struktura komunikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3
Struktura rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4
Tˇr´ıda ArraySet<E > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5
Prohled´av´an´ı grafu do ˇs´ıˇrky . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.6
Hlavn´ı okno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.7
Uk´azka aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1
Topologie hvˇezda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2
Topologie kruh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3
Topologie ˇretˇez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
C.1 Dalˇs´ı vyuˇzit´e tˇr´ıdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 C.2 RouterOSDevice
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
D.1 Pr˚ uvodce - Krok 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 D.2 Pr˚ uvodce - Krok 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 D.3 Pr˚ uvodce - Krok 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 D.4 Seznam pˇripojen´ı k s´ıti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 D.5 Nastaven´ı - Krok 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 D.6 Nastaven´ı - Krok 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
ix
x
Kapitola 1 ´ Uvod V dneˇsn´ı dobˇe, kdy t´emˇeˇr kaˇzd´ y vlastn´ı poˇc´ıtaˇc, chytr´ y telefon nebo televizor, se vˇsude vyskytuj´ı poˇc´ıtaˇcov´e s´ıtˇe ve vˇetˇs´ım nebo menˇs´ım mˇeˇr´ıtku. V mal´ ych i velk´ ych firm´ach to je nutnost´ı, doma to je sp´ıˇse o pohodl´ı. V kaˇzd´em pˇr´ıpadˇe je d˚ uleˇzit´a dokumentace. Je d˚ uleˇzit´a pˇri programov´an´ı, pˇri budov´an´ı poˇc´ıtaˇcov´e s´ıtˇe nebo pˇri jin´ ych ˇcinnostech s urˇcit´ ym v´ ysledkem. Bez spr´avn´e dokumentace je pomˇernˇe tˇeˇzk´e, ne-li nemoˇzn´e, se v poˇc´ıtaˇcov´e s´ıti orientovat. Pˇri pˇred´av´an´ı zodpovˇednosti za st´avaj´ıc´ı s´ıt’ pak nov´ y spr´avce nev´ı, kter´ y kabel kam vede a proˇc je na tom ˇci onom smˇerovaˇci (routeru) nˇejak´e pravidlo. O dokumentaci mluv´ım, protoˇze se na ni ˇcasto zapom´ın´a. Absence dokumentace (nebo jej´ı ne´ uplnost) je z velk´e vˇetˇsiny pˇr´ıpad˚ u zp˚ usobena odkl´ad´an´ım jej´ıho seps´an´ı aˇz na konec pr´ace. Nebo nastanou chv´ıle, kdy se v topologii provede zmˇena, kter´a se n´aslednˇe nezanese do dokumentace (pˇrid´an´ı prvku, spoje, nov´a sluˇzba, v´ ymˇena zaˇr´ızen´ı, ...) Probl´em nast´av´a, kdyˇz dokumentace nen´ı u ´pln´a a nem´ame jasnou pˇredstavu o tom, jak poˇc´ıtaˇcov´a s´ıt’ vypad´a. Proto je potˇreba takovou s´ıt’ zrekonstruovat. Jednou z moˇznost´ı je zaˇc´ıt u nˇejak´eho zaˇr´ızen´ı a ruˇcnˇe proj´ıt veˇskerou topologii poˇc´ıtaˇcov´e s´ıtˇe. To je ponˇekud pracn´e a zdlouhav´e, zvl´aˇstˇe pokud je poˇc´ıtaˇcov´a s´ıt’ rozlehl´a. Lepˇs´ı zp˚ usob je vyuˇz´ıt nˇekter´ ych funkc´ı, kter´ ymi disponuj´ı r˚ uzn´e aplikace, jako je napˇr´ıklad IP scan, route, tracert (traceroute) a ping. C´ılem m´e pr´ace je navrhnout a alespoˇ n ˇca´steˇcnˇe realizovat aplikaci pro jednoduchou a centralizovanou spr´avu s´ıtˇe na zaˇr´ızen´ıch MikroTik. Aplikace by mˇela sama vyhledat tato zaˇr´ızen´ı a vykreslit je v co moˇzn´a nejpˇresnˇejˇs´ı topologii.
1
Kapitola 2 Souˇ casn´ y stav N´asleduj´ıc´ı kapitola obsahuje informace o ”Neighbor Discovery Protokolu”, kter´ y je stˇeˇzejn´ı pro n´asleduj´ıc´ı pr´aci. Dalˇs´ı ˇca´st je vˇenovan´a softwaru, kter´ y se zab´ yv´a topologi´ı s´ıtˇe, monitoringem a dokumentac´ı. Popisuje jejich z´akladn´ı vlastnosti, v´ yhody a nev´ yhody. Posledn´ı ˇc´ast obsahuje zp˚ usoby vzd´alen´e zpr´avy zaˇr´ızen´ı MikroTik. Jeden z tˇechto zp˚ usob˚ u jsem musel zvolit pro pˇripojen´ı k zaˇr´ızen´ı, abych mohl vykreslit topologii.
2.1
Neighbor Discovery Protocol (NDP)
2.1.1
MikroTik Neighbor Discovery Protocol (MNDP)[2]
MikroTik Neighbor Discovery Protocol (MNDP) je propriet´arn´ı protokol spoleˇcnosti MikroTik. Slouˇz´ı k vyhled´av´an´ı zaˇr´ızen´ı s RouterOS v s´ıti a informac´ı o nˇem. MikroTik RouterOS je schopn´e zjistit zaˇr´ızen´ı podporuj´ıc´ı MNDP, ale i CDP. Z´akladn´ı funkce MNDP je automatick´a konfigurace funkc´ı, kter´e jsou dostupn´e mezi MikroTik smˇerovaˇci. Moment´alnˇe je MNDP vyuˇz´ıv´an pro funkci ”Packet Packer”. Tato funkce slouˇz´ı k lepˇs´ı propustnosti linky mezi MikroTik smˇerovaˇci. Vlastnosti MDNP: • Je dostupn´ y na rozhran´ıch typu Ethernet a na rozhran´ıch, kter´e maj´ı podporuj´ı IP protokol a maj´ı alespoˇ n jednu IP adresu. • Ve v´ ychoz´ım stavu je MDNP zapnuto na vˇsech rozhran´ıch typu Ethernet - Ethernet, wireless, EoIP, IPIP tunnels, PPTP-server • Pouˇz´ıv´a UDP protokol na portu 5678. 2
2.1. NEIGHBOR DISCOVERY PROTOCOL (NDP)
3
• Router pos´ıl´a UDP paket s informacemi o sobˇe broadcastem na L2 (linkov´e vrstvˇe ISO/OSI modelu) kaˇzd´ ych 60 vteˇrin. • Router kontroluje, jestli jeho informace jsou aktu´aln´ı kaˇzd´ ych 30 vteˇrin. • Pokud nejsou pˇrijaty ˇza´dn´e informace po dobu 180 vteˇrin, z´aznam o sousedovi se smaˇze.
2.1.2
Cisco Discovery Protocol (CDP)[22]
Cisco Discovery Protocol (CDP) je propriet´arn´ı protokol spoleˇcnosti Cisco Systems. Je to protokol 2. s´ıt’ov´e vrstvy ISO/OSI modelu nez´avisl´ y na mediu. Stejnˇe jako MNDP je pouˇz´ıv´an k sd´ılen´ı informac´ı o pˇr´ımo pˇripojen´ ych Cisco zaˇr´ızen´ıch. T´ım, ˇze poskytuje inˇ ´IMO PRIPOJEN ˇ ´ formace o PR YCH zaˇr´ızen´ı, je mnohem lepˇs´ı pro dynamick´e vykreslen´ı s´ıtˇe. Dalˇs´ım d˚ uvodem, proˇc je tento protokol lepˇs´ı pro vykreslen´ı s´ıtˇe, je fakt, ˇze Cisco zaˇr´ızen´ı nikdy nepˇrepos´ıl´a CDP pakety. Cisco zaˇr´ızen´ı pos´ıl´a periodicky, kaˇzd´ ych 60 vteˇrin CDP zpr´avy na multicastovou c´ılovou MAC adresu 01:00:0C:CC:CC:CC. Konkr´etn´ı informace, kter´e lze v CDP zpr´avˇe nal´ezt se liˇs´ı podle zaˇr´ızen´ı, od kter´eho zpr´ava poch´az´ı. Vlastnosti CDP: • Cisco zaˇr´ızen´ı nikdy nepˇrepos´ıl´a CDP pakety. • Cisco zaˇr´ızen´ı odes´ıl´a CDP paket s informacemi o sobˇe kaˇzd´ ych 60 vteˇrin. • Router kontroluje, jestli jeho informace jsou aktu´aln´ı kaˇzd´ ych 30 vteˇrin. • Pokud nejsou pˇrijaty ˇz´adn´e informace po dobu 180 vteˇrin (3 chybˇej´ıc´ı zpr´avy), z´aznam o sousedovi se smaˇze. CDP zpr´ava obsahuje mimo jin´e: • Cisco IOS verzi na zaˇr´ızen´ı • Platformu Hardwaru • IP adresy na rozhran´ı za´ızen´ı • Port-ID • IP Network Prefix • Jm´eno (hostname) zaˇr´ızen´ı
ˇ ´ STAV KAPITOLA 2. SOUCASN Y
4 • Duplex setting • Dom´enu VLAN Trunking Protokolu (VTP) • Nativn´ı VLAN
2.1.3
Link Layer Discovery Protocol (LLDP)[23]
Link Layer Discovery Protocol (LLDP) je protokol 2. linkov´e vrstvy a je definov´an standardem IEEE 802.1AB. Takˇze nen´ı z´avisl´ y na prvc´ıch od jednoho v´ yrobce. Je pouˇz´ıv´an s´ıt’ov´ ymi prvky k sd´ılen´ı informac´ı o jejich identitˇe a funkc´ı s ostatn´ımi prvky v s´ıti. LLDP je funkˇcn´ı na vˇsech 802 medi´ıch, typicky na Ethernetu. Vˇsechny informace z´ıskan´e pomoc´ı LLDP jsou uloˇzeny v tabulce a je moˇzn´e je vyˇc´ıst pomoc´ı SNMP (Simple Network Management Protocol). Zaˇr´ızen´ı pos´ılaj´ı zpr´avy (LLDPDU) periodicky nebo pˇri zmˇenˇe stavu portu. Jako c´ılovou adresu se pouˇz´ıv´a multicastov´a MAC adresa 01:80:c2:00:00:XX, kde XX je 03, 0E nebo 00. LLDP zpr´ava obsahuje mimo jin´e: • N´azev a popis syst´emu • N´azev a popis portu • VLAN • IP adresu • Schopnosti syst´emu (pˇrep´ın´an´ı, smˇerov´an´ı,...) • TTL = time to live
2.1.4
Neighbor Discovery Protocol (NDP) v IPv6[24]
Neighbor Discovery Protocol (NDP) v IPv6 je definov´an v RFC 4861. Stejnˇe jako vˇsechny protokoly tohoto typu komunikuje na linkov´e vrstvˇe. Sv´ ym zp˚ usobem nahrazuje Address Resolution Protokol (ARP) v IPv4. Jedn´ım z jeho u ´kol˚ u je totiˇz zjiˇst’ov´an´ı MAC adres uzl˚ u ve lok´aln´ı s´ıti. Z IPv6 nahrazuje tak´e ICMP Router Discovery (RDISC) a ICMP Redirect (ICMPv4). Nav´ıc disponuje tzv. ”detekce dosaˇzitelnosti souseda”. Nicm´enˇe tato dosaˇzitelnost se vyuˇz´ıv´a pouze v pˇr´ıpadˇe, kdy uzel komunikuje nebo chce komunikovat se sousedem.
´ ´I SPRAVA ´ ˇ S GRAFICKOU PODPOROU 2.2. CENTRALN S´ITE
2.2 2.2.1
5
Centr´ aln´ı spr´ ava s´ıtˇ e s grafickou podporou The Dude
The Dude je aplikace od spoleˇcnosti MikroTik, kter´a usnadˇ nuje spr´avu cel´e s´ıtˇe a to pˇredevˇs´ım zaˇr´ızen´ı s RouterOS. Automaticky proskenuje s´ıt’ na zadan´em rozsahu, vykresl´ı nalezen´a zaˇr´ızen´ı do mapy a monitoruje jejich dostupnost. Dok´aˇze monitorovat sluˇzby na zaˇr´ızen´ıch a upozornit, pokud nˇekter´a sluˇzba nebo zaˇr´ızen´ı nen´ı dostupn´e. V tomto smˇeru je velice podobn´ y syst´emu Nagios. Funguje na s´ıt’ov´e architektuˇre “klient-server”. Dude existuje jako voliteln´ y bal´ıˇcek do operaˇcn´ıho syst´emu RouterOS a jako aplikace do Windows. Po naskenov´an´ı zaˇr´ızen´ı je moˇzn´e vykreslenou mapu upravit a nastavit kontrolovan´e sluˇzby na zaˇr´ızen´ı. Stejnˇe tak je moˇzn´e vytvoˇrit vlastn´ı zaˇr´ızen´ı, kter´e tˇreba jeˇstˇe nen´ı pˇripojen´e do s´ıtˇe. Umoˇzn ˇuje vkl´ad´an´ı vlastn´ıch ikon (i vektorov´ ych) pro zaˇr´ızen´ı a vkl´ad´an´ı obr´azk˚ u na pozad´ı. T´ım lze n´azornˇe zobrazit, kde jak´e zaˇr´ızen´ı je um´ıstˇeno. V´ yhodou je tak´e moˇznost nastaven´ı “z´avislost´ı”. Pokud selˇze s´ıt’ov´ y prvek A na cestˇe k zaˇr´ızen´ı B, C a D, pak Dude zahl´as´ı nedostupnost pouze prvku A. T´ım se nezahlt´ı poˇstovn´ı schr´anka zbyteˇcn´ ymi zpr´avami. Pro z´ısk´av´an´ı informac´ı o prvku lze vyuˇz´ıt protokol SNMP a pokud jde o RouterOS, tak i dalˇs´ı informace specifick´e pro takov´e zaˇr´ızen´ı. Je moˇzn´e ho vyuˇz´ıt i jako vzd´alen´ y syslog. Co se mi nel´ıb´ı na tomto programu je duplicita zaˇr´ızen´ı, kter´e m´a v´ıce IP adres. Skenov´an´ı jednotliv´ ych IP adres nerozliˇsuje jedno zaˇr´ızen´ı s v´ıce IP adresami, coˇz je typick´ y smˇerovaˇc. Tud´ıˇz smˇerovaˇc mezi 5 s´ıtˇemi bude zanesen 5x a s´ıtˇe budou oddˇeleny. V´ yhodou je, ˇze je zdarma.
Obr´azek 2.1: Uk´azka programu The Dude
ˇ ´ STAV KAPITOLA 2. SOUCASN Y
6
2.2.2
Cisco Packet Tracer
Cisco Packet Tracer je velice siln´ y a rozs´ahl´ y n´astroj. Dok´aˇze simulovat re´aln´ y provoz v poˇc´ıtaˇcov´e s´ıti. Umoˇzn ˇuje navrhnout a simulovat poˇc´ıtaˇcovou s´ıt’ sloˇzenou pˇredevˇs´ım ze s´ıt’ov´ ych prvk˚ u znaˇcky Cisco. Mimo to nab´ız´ı propojen´ı virtu´aln´ı ˇca´sti s´ıtˇe se skuteˇcnou a t´ım usnadnit rozhodov´an´ı pˇri koupi nov´eho zaˇr´ızen´ı do jiˇz st´avaj´ıc´ı poˇc´ıtaˇcov´e s´ıˇe. Dok´aˇze tak´e sledovat provoz na s´ıti a odchyt´avat pakety. D´ıky vˇsem jeho vlastnostem dok´aˇze tento software n´azornˇe uk´azat moˇzn´e probl´emy v poˇc´ıtaˇcov´e s´ıti a usnadnit tak hled´an´ı ˇreˇsen´ı. Cisco Packet Tracer byl vytvoˇren spoleˇcnost´ı Cisco za u ´ˇcelem podpory v´ yuky v Cisco Networking Academy. Je volnˇe dostupn´ y jen pro registrovan´e ˇcleny Networking Academy. Nicm´enˇe tento program neumoˇzn ˇuje export do jin´ ych form´at˚ u, tud´ıˇz nen´ı moˇzn´e pˇren´est v nˇem navrhnutou topologii poˇc´ıtaˇcov´e s´ıtˇe do jin´eho softwaru. Nen´ı ani moˇzn´e vygenerovat/exportovat obr´azek pro dokumentaci.
Obr´azek 2.2: Uk´azka programu Cisco Packet Tracer
´ ´I SPRAVA ´ ˇ S GRAFICKOU PODPOROU 2.2. CENTRALN S´ITE
2.2.3
7
Graphical Network Simulator (GNS3)
GNS3 je open source software, kter´ y dok´aˇze simulovat komplexn´ı poˇc´ıtaˇcovou s´ıt’. Je vyd´avan´ y pod GPL v2 licenc´ı a je dostupn´ y v nˇekolika jazyc´ıch. Bˇeˇz´ı na vˇsech zn´am´ ych operaˇcn´ıch syst´emech (Windows, Linux a MacOS X). Na rozd´ıl od Packet Tracer-u k simulaci vyuˇz´ıv´a v´ıce emul´ator˚ u: Qemu, Dynamips a VirtualBox. Je tedy v´ yborn´ ym n´astrojem pro v´ yuku nebo testov´an´ı. V pˇr´ıpadˇe pouˇzit´ı VirtualBoxu m´a GNS3 velk´e n´aroky na CPU a na pamˇet’ hostovsk´eho poˇc´ıtaˇce. N´aroky na prostˇred´ı jsou z´avisl´e na konkr´etn´ım nastaven´ı programu. Ovl´ad´an´ı je intuitivn´ı a grafick´e zobrazen´ı je podobn´e jako v Cico Packet Tracer. Aˇckoli je v´ıce obecn´ y, pro praktick´e pouˇzit´ı vyˇzaduje IOS obrazy nebo virtualizovan´e stroje. Samozˇrejmost´ı je export obr´azk˚ u do form´atu PNG. Poskytuje zachyt´av´an´ı paket˚ ua anal´ yzu pomoc´ı programu Wireshark [20]. Velkou v´ yhodou je tak´e moˇznost propojen´ı virtu´aln´ı s´ıtˇe spolu s fyzick´ ym zaˇr´ızen´ım (smˇerovaˇc, pˇrep´ınaˇc, NAS, . . . ).
Obr´azek 2.3: Uk´azka programu GNS3
2.2.4
Nagios
Syst´emem Nagios je velmi pouˇz´ıvan´ ym. Jedn´a se o monitorovac´ı syst´em, kter´ y se mus´ı bohuˇzel ruˇcnˇe nastavit. Nav´ıc konfigurace nen´ı nijak jednoduch´a. Kaˇzd´e zaˇr´ızen´ı a sluˇzby,
ˇ ´ STAV KAPITOLA 2. SOUCASN Y
8
kter´e chceme monitorovat, se mus´ı ruˇcnˇe zadat a ruˇcnˇe zakreslit topologii. Nagios podle topologie vykresl´ı mapu, na kter´e lze pˇrehlednˇe vidˇet funkˇcn´ı a nefunkˇcn´ı zaˇr´ızen´ı. Orientuje se podle IP adres, z toho plyne, ˇze pracuje na 3. vrstvˇe ISO/OSI modelu. Pˇri v´ ypadku stroje, na kter´em jsou spuˇstˇeny sluˇzby, poˇsle Nagios upozorˇ nuj´ıc´ı zpr´avu o v´ ypadku stroje a dalˇs´ı zpr´avy o nedostupnosti vˇsech sluˇzeb na tomto stroji. Na druhou stranu je pˇrizp˚ usobiteln´ y a rozˇsiˇriteln´ y. Je otestovan´ y i na velk´ ych a sloˇzit´ ych s´ıt´ı. Disponuje velk´ ym mnoˇzstv´ı modul˚ u.
Obr´azek 2.4: Uk´azka programu Nagios
2.3
Vzd´ alen´ a spr´ ava zaˇ r´ızen´ı
K zaˇr´ızen´ı s nainstalovan´ ym RouterOS je moˇzn´e se pˇripojit nˇekolika zp˚ usoby. Velice zn´am´ ymi zp˚ usoby jsou telnet, ssh nebo pˇres webov´e rozhran´ı (Webfig). V´ yznamnˇejˇs´ım a praktiˇctˇejˇs´ım zp˚ usobem pˇripojen´ı k tomuto operaˇcn´ım syst´emu je pomoc´ı API nebo pomoc´ı jejich propriet´arn´ı aplikace Winbox.
´ ´ SPRAVA ´ ˇ ´IZEN´I 2.3. VZDALEN A ZAR
2.3.1
9
Telnet a SSH
Telnet je zkratkou Telecommunication Network. Je postaven nad protokolem TCP a pouˇz´ıv´a spojen´ı typu server-klient. Telnet standardnˇe poslouch´a na portu 23. Pro spr´avnou komunikaci mezi obˇema stranami je souˇca´st´ı tohoto protokolu tak´e vz´ajemn´a domluva na nˇekter´ ych dalˇs´ıch parametrech. Z´asadn´ım d˚ uvodem, proˇc nen´ı vhodn´e Telnet pouˇz´ıvat, je bezpeˇcnost. Kdyˇz byl Telnet vyvinut, nikdo nepˇredpokl´adal, ˇze by mohl nˇekdo tuto komunikaci odposlouch´avat. Proto nen´ı Telnet nijak ˇsifrov´an vˇcetnˇe hesla. Na druhou stranu je jednoduch´ y a rychl´ y. Proto se vyuˇz´ıv´a v pˇr´ıpadˇe, kdy m´a spr´avce pˇr´ıstup k zaˇr´ızen´ı napˇr´ıklad pomoc´ı s´eriov´e linky. Pro bezpeˇcn´e pˇripojen´ı v s´ıti byl vyvinut SSH (Secure Shell). SSH ˇsifruje hesla a veˇskerou komunikaci, kter´a je pos´ıl´ana. Vyuˇz´ıv´a protokol TCP, stejnˇe jako Telnet, a server standardnˇe poslouch´a na portu 22. Ani SSH nen´ı zcela bezpeˇcn´e, pokud se nechov´ame bezpeˇcnˇe my. Proto je nutn´e, aby kaˇzd´ y veˇrejn´ y kl´ıˇc vzd´alen´eho zaˇr´ızen´ı byl ˇr´adnˇe ovˇeˇren.
2.3.2
WebFig
Dneˇsn´ı uˇzivatel ˇcasto poˇzaduje ovl´adat zaˇr´ızen´ı pomoc´ı webov´e str´anky. M´a to hned nˇekolik v´ yhod. Nemus´ı nic instalovat, m´a pˇr´ıstup odkudkoli a webov´ y prohl´ıˇzeˇc je pro nˇej zn´am´a vˇec, kterou pouˇz´ıv´a dennˇe. I pro zaˇr´ızen´ı s RouterOS existuje spr´ava pomoc´ı webov´eho rozhran´ı zvan´em WebFig. WebFig je doslova webovou kopii aplikace WinBox. K zaˇr´ızen´ı se pˇristupuje pomoc´ı IP adresy zadan´e do adresn´ıho ˇra´dku webov´eho prohl´ıˇzeˇce.
Obr´azek 2.5: Uk´azka rozhran´ı WebFig
ˇ ´ STAV KAPITOLA 2. SOUCASN Y
10
2.3.3
WinBox
WinBox je asi nejpouˇz´ıvanˇejˇs´ı aplikac´ı pro konfiguraci a monitoring tˇechto zaˇr´ızen´ı. Jedn´a se o malou aplikaci (jeden soubor) s jednoduch´ ym grafick´ ym rozhran´ı. Prim´arnˇe je vytvoˇren pro operaˇcn´ı syst´em Windows, ale funguje i na operaˇcn´ım syst´emu Linux a MAC OSX pomoc´ı Wine[21]. Wine je vrstva mezi aplikacemi pro OS Windows a Unix syst´emy. Rozhran´ı aplikace a konzolov´e rozhran´ı si jsou natolik podobn´e, ˇze se kaˇzd´ y uˇzivatel, kter´ y um´ı v jednom, rychle zorientuje v druh´em.
Obr´azek 2.6: Uk´azka rozhran´ı WinBox
2.3.4
API
API (Application Programmable Interface) dovoluje komukoli vytvoˇrit aplikaci komunikuj´ıc´ı s RouterOS a zajiˇst’uj´ıc´ı libovoln´e funkce, kter´e vyˇzaduje. Syntaxe API je velice podobn´a syntaxi CLI (command line interface). API je dostupn´e aˇz od RouterOS verze 3.x a vyˇsˇs´ı. D˚ uleˇzit´a je tak´e pozn´amka, ˇze sluˇzba API, poslouchaj´ıc´ı na portu 8728, je ve v´ ychoz´ım nastaven´ı vypnut´a. Princip komunikace s RouterOS je zaloˇzena na zas´ıl´an´ı tzv. ”vˇet”(sentence) a pˇrij´ım´an´ı jedn´e nebo v´ıce ”odpovˇed´ı”(reply). Vˇeta je sekvence ”slov”(word). Kaˇzd´a vˇeta mus´ı jako prvn´ı slovo obsahovat ”pˇr´ıkaz”(command). Dalˇs´ı slova mohou b´ yt v libovoln´em poˇrad´ı. Po pˇrijet´ı cel´e vˇety ji RouterOS provede a vr´at´ı
´ ´ SPRAVA ´ ˇ ´IZEN´I 2.3. VZDALEN A ZAR
11
jednu nebo v´ıce odpovˇed´ı. Kaˇzd´e slovo mus´ı b´ yt zak´odov´ano urˇcit´ ym zp˚ usobem popsan´ ym v manu´alu na wiki [3]. Slova jsou rozdˇelena na: • Command word – pˇr´ıkaz je totoˇzn´ y s CLI pˇr´ıkazem, kter´ y m´ısto mezer obsahuje znak “/” – zaˇc´ın´a znakem “/” – napˇr: ∗ /login ∗ /ip/address/getall ∗ /ip/neighbor/print ∗ /interface/vlan/remove • Attribute word – kaˇzd´ y atribut zaˇc´ın´a znakem “=” – n´asleduje jm´eno atributu – znak “=” a hodnota atributu – napˇr: ∗ =address=10.1.1.1 ∗ =name=moje jm´eno • Query word – slouˇz´ı k filtrov´an´ı odpovˇed´ı. Analogi´ı je WHERE v jazyce SQL – zaˇc´ın´a znakem ”?” – druh´ y znak je modifik´ator: =, -, <, > – z´aleˇz´ı na jejich poˇrad´ı! – napˇr: ∗ ?type=ether ∗ ?>comment= ∗ ?-comment
ˇ ´ STAV KAPITOLA 2. SOUCASN Y
12 • Reply word – prvn´ı slovo zaˇc´ın´a znakem ”!”
– na kaˇzdou vˇetu RouterOS odpov´ı vˇzdy alespoˇ n jednou odpovˇed´ı – typy odpovˇed´ı: ∗ !done - Prvn´ı slovo, posledn´ı odpovˇedi na dotaz (“vˇetu”). ∗ !re - vr´acen´a data ∗ !fatal - pˇri ukonˇcen´ı spojen´ı pˇres API, zaˇsle router tuto zpr´avu spolu s d˚ uvodem uzavˇren´ı spojen´ı ∗ !trap - probl´em a jeho kategorie 1. missing item or command 2. argument value failure 3. execution of command interrupted 4. scripting related failure 5. general failure 6. API related failure 7. TTY related failure 8. value generated with :return command
2.4
V´ ysledky a nedostatky existuj´ıc´ıch moˇ znost´ı
V oblasti dostupn´eho softwaru je jedin´a moˇznost pro centralizovanou spr´avu a pro automatick´e vyhled´av´an´ı zaˇr´ızen´ı MikrotTik. Je j´ım program The Dude od spoleˇcnosti MikroiTik. Jak jsem psal v sekci o programu The Dude 2.2.1, je tento program velice propracovan´ ym a uˇziteˇcn´ ym n´astrojem, kter´ y m´a mnoho funkc´ı. Nicm´enˇe m´a jednu z´asadn´ı vˇec, kter´a je dle m´eho ˇspatn´a. Je t´ım duplicita zaˇr´ızen´ı s v´ıce IP adresami. Dalˇs´ı vˇec, kter´a je podle mˇe zbyteˇcn´a, je skenovat cel´ y rozsah IP adres. Proto bych r´ad vytvoˇril aplikaci, kter´a eliminuje duplicitu a nebude n´ahodnˇe zkouˇset IP adresy, kter´e jsou dostupn´e v s´ıti, ale vyuˇzije NDP k systematick´emu vyhled´av´an´ı zaˇr´ızen´ı. V´ yhodou moj´ı aplikace oproti programu The Dude bude, ˇze nebude z´aleˇzet, jak´e pods´ıtˇe zad´am (pro skenov´an´ı), ale nalezne vˇsechna zaˇr´ızen´ı ve vˇsech pods´ıt´ı, kter´a jsou dostupn´a.
Kapitola 3 Implementace Pro v´ yvoj aplikace potˇrebuji testovac´ı prostˇred´ı, programovac´ı jazyk a n´avrh rozdˇelen´ı na podprobl´emy. Jako testovac´ı prostˇred´ı byla zvolena simulace poˇc´ıtaˇcov´e s´ıtˇe 3.1 a pro implementaci programovac´ı jazyk Java 3.2. Hlavn´ı podprobl´emy jsou logick´a 3.3 a grafick´a 3.4 ˇca´st aplikace. Tato kapitola popisuje v prvn´ı ˇca´sti simulaˇcn´ı prostˇred´ı, kter´e jsem potˇreboval pro testov´an´ı aplikace. D´ale z´akladn´ı popis programovac´ıho jazyka Java a d˚ uvody, proˇc jsem si tento jazyk zvolil pro implementaci moj´ı aplikace. N´asleduje implementace a probl´emy, se kter´ ymi jsem se pot´ ykal v logick´e ˇc´asti. Posledn´ı ˇca´st je vˇenovan´a grafick´emu zobrazen´ı dat. Aˇckoli je zaˇr´ızen´ı Mikrotik a jeho operaˇcn´ı syst´em RouterOS urˇcen pˇredevˇs´ım ke smˇerov´an´ı mezi s´ıtˇemi, nen´ı to tak vˇzdy a jeho moˇznosti jsou rozs´ahl´e. Proto jsem pˇri n´avrhu a n´asledn´e implementaci nepˇredpokl´adal ˇz´adn´a speci´aln´ı nastaven´ı, kter´a nejsou ve v´ ychoz´ım stavu. Tud´ıˇz jsem se nemohl spolehnout na dynamick´e smˇerov´an´ı OSPF nebo BGP. M´ ym jedin´ ym pˇredpokladem byla zapnut´a sluˇzba API.
3.1
Simulaˇ cn´ı prostˇ red´ı
K implementaci tak´e patˇr´ı vyzkouˇsen´ı a otestov´an´ı dan´e aplikace. Proto jsem potˇreboval bud’ re´alnou poˇc´ıtaˇcovou s´ıt’ postavenou na tˇechto zaˇr´ızen´ıch nebo si zˇr´ıdit nˇejak´e simulaˇcn´ı prostˇred´ı s RouterOS. Protoˇze z´ıskat pˇr´ıstup k takov´e re´aln´e s´ıti nen´ı lehk´e, vyuˇzil jsem program GNS3 (Graphical Network Simulator) spolu s programem Oracle VM VirtualBox. Jak jsem popsal v´ yˇse, GNS3 je open source software, kter´ y dok´aˇze simulovat komplexn´ı poˇc´ıtaˇcovou s´ıt’ a je moˇzn´e ho pˇripojit i na fyzickou s´ıt’. S fyzickou s´ıt´ı jsem propojen´ı nepotˇreboval, ale potˇreboval jsem propojen´ı s poˇc´ıtaˇcem, na kter´em aplikaci vyv´ıj´ım 13
14
KAPITOLA 3. IMPLEMENTACE
(lok´aln´ım poˇc´ıtaˇcem). Oracle VM VirtualBox virtualizuje x86 hardware, takˇze cokoli lze spustit na t´eto architektuˇre, lze spustit i ve virtualizaˇcn´ım n´astroji VirtualBox. Stejnˇe jako GNS3 tak i VirtualBox bˇeˇz´ı i na operaˇcn´ıch syst´emech Windows, Linux a MacOS X. Spoleˇcnost Mikrotik poskytuje na sv´ ych webov´ ych str´ank´ach instalaˇcn´ı soubory operaˇcn´ıho syst´emu RouterOS pro r˚ uzn´a hardwarov´a zaˇr´ızen´ı, mimo jin´e i pro architekturu x86. Kombinac´ı tˇechto 3 vˇec´ı jsem byl schopen simulovat malou virtu´aln´ı s´ıt’, kter´a mi byla n´apomocna pro v´ yvoj a testov´an´ı moj´ı aplikace. V programu VirtualBox jsem tedy vytvoˇril nˇekolik poˇc´ıtaˇc˚ u“, na kter´e jsem nain” staloval operaˇcn´ı syst´em RouterOS. Minim´aln´ı poˇzadavky pro tento operaˇcn´ı syst´em jsou: 32MB RAM a 64MB m´ısta na disku. N´aslednˇe jsem musel importovat virtu´aln´ı poˇc´ıtaˇce do programu GNS3, aby byly pˇr´ıstupn´e a mohl jsem tak ovl´adat tyto poˇc´ıtaˇce a pˇredevˇs´ım je propojit mezi sebou, jak jsem potˇreboval. Kdybych totiˇz pouˇzil pouze program VirtualBox, tak vˇsechny poˇc´ıtaˇce jsou v jedn´e pods´ıti.
3.2
Java
Rozhodl jsem se implementovat aplikaci v programovac´ım jazyku Java jako aplikaci bˇeˇz´ıc´ı na lok´aln´ım poˇc´ıtaˇci. Programovac´ı jazyk Java je objektovˇe-orientovan´ y programovac´ı jazyk (tzv. OOP), kter´ y vyvinula spoleˇcnost Sun Microsystem. Dnes je tento jazyk vyv´ıjen pod firmou Oracle zn´amou pˇredevˇs´ım pro jejich datab´azov´e syst´emy. OOP je v dneˇsn´ı dobˇe velice popul´arn´ı zp˚ usob jak ps´at aplikace, protoˇze m´a oproti procedur´aln´ımu programov´an´ı spoustu v´ yhod. Jmenuji jen ty, kter´e povaˇzuji za nepodstatnˇejˇs´ı: znovupouˇzitelnost k´odu, zapouzdˇren´ı, dˇediˇcnost,... OOP se zaˇcalo vyuˇz´ıvat ve starˇs´ıch programovac´ıch nebo skriptovac´ıch jazyc´ıch jako je C++, PHP, JavaScript,...V´ yhodou jazyku Java je tak´e jeho pouˇzitelnost na r˚ uzn´ ych platform´ach. Aplikaci napsanou v jazyce Java je moˇzn´e pouˇz´ıt na vˇsech zaˇr´ızen´ı, kter´a maj´ı nainstalovanou Java Runtime Enviroment (JRE), kter´e je dostupn´e pro platformu Windows, Unix i Mac.
3.3 3.3.1
Logick´ aˇ c´ ast Pˇ ripojen´ı k RouterOS
Pro pˇripojen´ı se zaˇr´ızen´ım MikroTik s operaˇcn´ım syst´emem RouterOS jsem se rozhodl vyuˇz´ıt sluˇzbu API, kter´a je nejvhodnˇejˇs´ı pro komunikace vlastn´ı aplikace a RouterOS, a pro kter´e jsou naps´any knihovny pro r˚ uzn´e programovac´ı jazyky – Java, PHP, C,
´ C ˇ AST ´ 3.3. LOGICKA
15
Python, Perl, Delphi ... Chtˇel jsem tedy pouˇz´ıt knihovnu pro Javu dostupnou na str´ank´ach spoleˇcnosti MikroTik od autora janisk“. Bohuˇzel jsem pˇri pokusu o prvn´ı komunikaci zjis” til, ˇze tato knihovna neumoˇzn ˇuje spojen´ı se zaˇr´ızen´ım. Naˇstˇest´ı je na t´eˇze str´ance zdrojov´ y k´od t´eto knihovny a pˇri hlubˇs´ım prozkoum´an´ı jsem zjistil, ˇze knihovna vyuˇz´ıv´a metodu InetAddress.isReachable(int timeout), kter´a mi pˇri nˇekolika spuˇstˇen´ı vˇzdy vr´atila “false”, tud´ıˇz se nikdy nespoj´ı. Na tuto chybu jsem naˇsel na internetu diskuze, ale ˇza´dn´a nemˇela vysvˇetlen´ı proˇc se tak dˇeje, natoˇz jak ji opravit. Knihovna rovnˇeˇz obsahovala strukturu, kterou jsem shledal zbyteˇcnˇe sloˇzitou a nelogickou a obsahuj´ıc´ı zbyteˇcn´e metody a promˇenn´e. Tud´ıˇz jsem se rozhodl ji pˇrepsat tak, aby byla jednoduˇsˇs´ı, pˇrehlednˇejˇs´ı a vyhovovala m´ ym potˇreb´am. Ve v´ ysledku jsem pˇrepsal t´emˇeˇr cel´ y k´od pˇri zachov´an´ı myˇslenky. Avˇsak nam´ısto 2 speci´aln´ıch vl´aken pro jedno spojen´ı vyuˇz´ıv´am pouze jedno (pro pˇr´ıjem dat) a strukturu jsem zjednoduˇsil ze 4 soubor˚ u na 2. Jedin´a tˇr´ıda, kterou jsem vyuˇzil beze zmˇeny, je Hasher.java, kter´a obsahuje funkce pro hashov´an´ı zpr´av pˇri pˇrihlaˇsov´an´ı do zaˇr´ızen´ı. D˚ uvodem slouˇcen´ı tˇechto tˇr´ıd je jejich vz´ajemn´ y vztah a logick´e uspoˇr´ad´an´ı. Kaˇzd´a instance spojen´ı (ConnectionAPI ) vyuˇzije pr´avˇe jednu instanci ostatn´ıch tˇr´ıd a z´aroveˇ n tyto tˇr´ıdy nebudou potˇreba v jin´e ˇc´asti aplikace. Proto je moˇzn´e je zpˇr´ıstupnit pouze pro tˇr´ıdu ConnectionAPI (oproti p˚ uvodn´ımu n´avrhu). Na obr´azku 3.1 je vidˇet struktura komunikace pomoc´ı API. Tˇr´ıda ConnectionAPI vytv´aˇr´ı pˇri pˇripojen´ı socket (na zadanou IP adresu a port), instanci tˇr´ıdy ParserAPI (pro zpracov´an´ı odpovˇed´ı) a vl´akno ( listener“), kter´e vr´acen´e odpovˇedi od RouterOS ” uloˇz´ı do fronty. Listener“ je instanc´ı tˇr´ıdy ReadCommand a pro odes´ıl´an´ı se pouˇz´ıv´a ” tˇr´ıda WriteCommand. Pro komunikaci jsem navrhl a vytvoˇril soubor tˇr´ıd, kter´a odpov´ıd´a popisu komunikace pomoc´ı API. Jak zobrazuje obr´azek 3.2, struktura obsahuje 2 z´akladn´ı tˇr´ıdy – Reply a Sentence. Reply je odpovˇed’ od zaˇr´ızen´ı s RouterOS a m´a sv˚ uj typ. Typ odpovˇed´ı je koneˇcn´ y a proto je implementov´an pomoc´ı enumeration“. Obsahuje seznam instanc´ı tˇr´ıdy ” Attribute. Sentence je tˇr´ıda reprezentuj´ıc´ı vˇetu“, kter´a se pos´ıl´a zaˇr´ızen´ı na zpracov´an´ı. ” Obsahuje slova“, kter´a jsou typu Command, Attribute nebo Query. Tˇr´ıda Word je abs” traktn´ı, protoˇze obsahuje abstraktn´ı metody getAPISyntax a getCLISyntax. D˚ uvod je zˇrejm´ y, kaˇzd´ y typ slova m´a jinou syntaxi.
3.3.2
RouterOS a rozhran´ı
Implementovat cel´ y operaˇcn´ı syst´em RouterOS nen´ı c´ılem t´eto pr´ace, i kdyˇz by to velice pomohlo. Nicm´enˇe jsem potˇreboval vytvoˇrit tˇr´ıdu, kter´a bude reprezentovat zaˇr´ızen´ı
16
KAPITOLA 3. IMPLEMENTACE
Obr´azek 3.1: Struktura komunikace pomoc´ı API
s RouterOS. K tomu slouˇz´ı tˇr´ıda RouterOsDevice. Ta obsahuje z´akladn´ı informace o zaˇr´ızen´ı – identitu, (unik´atn´ı) software ID, platformu, verzi syst´emu, router board model, pˇr´ıstupovou IP, pˇrihlaˇsovac´ı u ´daje, instanci tˇr´ıdy ConnectionInterface pro pˇripojen´ı a HashMapu IP adres a rozhran´ı.
´ C ˇ AST ´ 3.3. LOGICKA
17
Obr´azek 3.2: Struktura komunikace
18
KAPITOLA 3. IMPLEMENTACE Z metod zm´ın´ım jen ty nejd˚ uleˇzitˇejˇs´ı. Metoda equals(...), kter´a porovn´av´a kl´ıˇcov´e
software ID a identitu zaˇr´ızen´ı. Ta se vyuˇz´ıv´a pˇri pˇrid´av´an´ı do seznamu (pˇresnˇeji mnoˇziny) vˇsech zaˇr´ızen´ı. Metodu connect(...), kter´a slouˇz´ı k pˇripojen´ı, k z´ısk´an´ı instance rozhran´ı podle jm´ena slouˇz´ı metoda getInterfaceByName(...). Velk´ ym probl´emem, kter´ y jsem ˇreˇsil, bylo vytvoˇren´ı struktury rozhran´ı. Spoleˇcn´ ych (vyuˇziteln´ ych) vˇec´ı maj´ı totiˇz velice m´alo – jm´eno a typ. Pouze ˇca´steˇcnˇe jsem si ulehˇcil pr´aci t´ım, ˇze jsem se zamˇeˇril na ty z´akladn´ı - bridge, ethernet, wlan, vlan. Opˇet jsem tedy musel vytvoˇrit soubor tˇr´ıd reprezentuj´ıc´ı tuto skuteˇcnost. Z´akladem je tˇr´ıda Basicinterface obsahuj´ıc´ı parametr name (n´azev rozhran´ı), type, device, MAC , comment a disabled . Parametr name je n´azev rozhran´ı, device je zaˇr´ızen´ı, ke kter´emu rozhran´ı patˇr´ı, MAC obsahuje ˇretˇezec MAC adresy, type je instance InterfaceType ˇr´ıkaj´ıc´ı, o jak´ y typ rozhran´ı jde a comment spolu s disabled nejsou nijak podstatn´e, ale jsou jen pro u ´plnost. Struktura tˇechto tˇr´ıd je zobrazena na obr´azku ”Struktura rozhran´ı”3.3.
3.3.3
Naˇ c´ıt´ an´ı u ´ˇ ct˚ u
Abych se mohl pˇripojit na zaˇr´ızen´ı s RouterOS, potˇrebuji k tomu pˇrihlaˇsovac´ı u ´daje. V´ ychoz´ım nastaven´ım je pˇrihlaˇsovac´ı jm´eno “admin” a pr´azdn´e heslo. V praxi samozˇrejmˇe nebude m´ıt u ´ˇcet admin pr´azdn´e heslo, ale tak´e ne kaˇzd´ y bude m´ıt pˇr´ıstup jako admin. V cel´e s´ıti tak´e nemus´ı m´ıt jeden uˇzivatel vˇzdy stejn´e heslo, i kdyˇz to je pravdˇepodobn´e. Zvl´aˇstˇe v pˇr´ıpadˇe, kdy RouterOS m˚ uˇze ovˇeˇrovat uˇzivatele na RADIUS serveru. Do souboru accounts.csv se mohou pˇrid´avat pˇrihlaˇsovac´ı u ´daje oddˇelen´e stˇredn´ıkem, kter´e se naˇc´ıtaj´ı do aplikace. K naˇc´ıt´an´ı vyuˇz´ıv´am ovˇeˇrenou a jednoduchou knihovnu CSVReader [4]. Tu tak´e pouˇz´ıv´am k zaznamen´av´an´ı nˇekter´ ych kl´ıˇcov´ ych ud´alost´ı do logu v adres´aˇri “logs”.
3.3.4
Prohled´ av´ an´ı s´ıtˇ e
Nejd˚ uleˇzitˇejˇs´ı ˇc´ast´ı moj´ı aplikace je prohled´av´an´ı s´ıtˇe. Pˇredstava byla pomˇernˇe jednoduch´a: ”Zept´am se jednoho zaˇr´ızen´ı, jak´e m´a sousedy, zap´ıˇsu a zept´am se dalˇs´ıho.” Tato zjednoduˇsen´a pˇredstava m´a nˇekolik probl´em˚ u. Smyˇcky – v pˇr´ıpadˇe, ˇze je v s´ıti smyˇcka, ptal bych se st´ale dokola a nikdy bych se nezastavil. Stejnˇe tak, kdyˇz mi zaˇr´ızen´ı A vr´at´ı souseda B, tak mi zaˇr´ızen´ı B vr´at´ı souseda A. Tud´ıˇz potˇrebuji nˇejak´ y ukazatel, kter´ y mi ˇrekne, ˇze jsem se dan´eho zaˇr´ızen´ı uˇz ptal. Jedn´ım z ˇreˇsen´ı je vytvoˇrit si na zaˇr´ızen´ı soubor nebo nastaven´ı, kter´e nikdy nikdo nepouˇzije. Dalˇs´ı zp˚ usob, kter´ y mˇe napadl byla kombinace parametr˚ u, tˇreba IP adres. Takov´e zaˇr´ızen´ı bych si musel uloˇzit, pˇripojit se na nˇej, vyˇc´ıst informace a pak bych
´ C ˇ AST ´ 3.3. LOGICKA
19
Obr´azek 3.3: Struktura rozhran´ı
zjistil, jestli jsem na tomto zaˇr´ızen´ı uˇz byl. Po prozkoum´an´ı str´anek firmy MikroTik jsem zjistil, ˇze unik´atn´ım identifik´atorem RouterOS je jeho tzv. software ID“. ” D˚ uleˇzit´a je tak´e informace, co n´am vrac´ı RouterOS na ot´azku Jak´e m´aˇs sousedy?“ ” Takto vypad´a jedna odpovˇed’: !re =.id=*2 =interface=bridge1 =address=10.1.2.2
20
KAPITOLA 3. IMPLEMENTACE
=mac-address=08:00:27:D4:F2:A3 =identity=Mikrotik-1 =platform=MikroTik =version=5.20 =unpack=none =age=00:00:37 =uptime=00:00:19 =software-id=W5EY-LHT9 =board=x86 =ipv6=false =interface-name=most1 • !re - oznaˇcuje odpovˇed’ • .id – ˇc´ıslo odpovˇedi • interface – n´azev lok´aln´ıho rozhran´ı, ke kter´emu je toto zaˇr´ızen´ı pˇripojeno • address – IP adresa vzd´alen´eho zaˇr´ızen´ı • mac-address – MAC adresa vzd´alen´eho zaˇr´ızen´ı • interface-name – jm´eno rozhran´ı na vzd´alen´em zaˇr´ızen´ı • software-id – software ID vzd´alen´eho zaˇr´ızen´ı (pouze u RouterOS) • identity – n´azev vzd´alen´eho zaˇr´ızen´ı • platform – platforma vzd´alen´eho zaˇr´ızen´ı (MikroTik, Cisco, AG5, ...) • version – verze OS vzd´alen´eho zaˇr´ızen´ı • board - RouterBoard model (pouze u RouterOS) • unpack – typ komprese discovery paketu • age – ˇcas od posledn´ıho pˇrijet´ı discovery paketu • uptime – doba spuˇstˇen´ı vzd´alen´eho zaˇr´ızen´ı (pouze u RouterOS) Bohuˇzel tyto informace jsou nˇekdy zav´adˇej´ıc´ı. Protoˇze jsem celou simulovanou s´ıt’ nastavil, v´ım, ˇze zaˇr´ızen´ı Mikrotik-1 nem´a na rozhran´ı s n´azvem most1 ˇz´adnou IP adresu.
´ C ˇ AST ´ 3.3. LOGICKA
21
Ale rozhran´ı most1 zahrnuje rozhran´ı ether1 a ether2 a pr´avˇe jedno toto rozhran´ı m´a tuto IP adresu a MAC adresu. Vˇsechny implementace Neighbor Discovery Protokol vracej´ı sousedy na 2. linkov´e vrstvˇe ISO/OSI modelu. Je jedno, jestli jsou vˇsechna zaˇr´ızen´ı zapojena do jednoho centr´aln´ıho pˇrep´ınaˇce (switch), nebo za sebou a jejich porty nastavena do mostu (bridge) nebo libovoln´a kombinace. Pˇri stejn´em nastaven´ı zaˇr´ızen´ı s RouterOS a r˚ uzn´em zapojen´ı d´avaj´ı dotazy na sousedy totoˇzn´e v´ ysledky na kaˇzd´em zaˇr´ızen´ı. Proto mi tyto informace k vykreslen´ı topologie nestaˇc´ı. K tomu potˇrebuji z´ıskat informace, jak´a zaˇr´ızen´ı (a kolik jich je) jsou pˇripojena na konkr´etn´ı fyzick´ y port. Pokud RouterOS nem´a zaˇrazeny ˇza´dn´e porty do rozhran´ı bridge ani spojen´e porty do pˇrep´ınaˇce (switch-e), nen´ı to probl´em, ale m´ ym c´ılem bylo nepˇredpokl´adat konkr´etn´ı nastaven´ı ani omezen´ı. Proto na tuto moˇznost nemohu spol´ehat. Jako moˇzn´e ˇreˇsen´ı se jevilo z´ıskat informace z rozhran´ı ”bridge”. Pˇri spr´avn´em dotazu z´ısk´am informaci, kter´e MAC adresy jsou pˇripojeny ke konkr´etn´ımu fyzick´emu ethernetportu. V m´em mal´em simulovan´em prostˇred´ı o nˇekolika m´alo zaˇr´ızen´ı se to zd´alo jako moˇzn´e ˇreˇsen´ı. V praxi vˇsak je poˇc´ıtaˇcov´a s´ıt’ daleko rozs´ahlejˇs´ı a seznam MAC adres je dlouh´ y. Z tohoto seznamu MAC adres nav´ıc nezjist´ım, o jak´e zaˇr´ızen´ı se jedn´a (RouterOS, Cicso, TP-LINK,...). Toto je tedy z´asadn´ı probl´em, proˇc jsem nevytvoˇril aplikaci, jakou jsem zam´ yˇslel. Chtˇel jsem vytvoˇrit aplikaci, aby pravdivˇe zobrazila spojen´ı mezi jednotliv´ ymi zaˇr´ızen´ımi podle toho, kter´e fyzick´e porty jsou skuteˇcnˇe zapojeny. Tento probl´em je probl´em grafu, kter´ y lze vyˇreˇsit, ale nen´ı to obsahem t´eto pr´ace. Proto jsou v m´e pr´aci uloˇzena spojen´ı ”kaˇzd´ y s kaˇzd´ ym”v r´amci jedn´e pods´ıtˇe. Pro pˇrehlednost je vykreslen´ı zjednoduˇseno na spojen´ı se ”s´ıt´ı”. Nalezen´a zaˇr´ızen´ı jsem zpoˇc´atku ukl´adal do struktury ArrayList. N´aslednˇe jsem si uvˇedomil, ˇze kaˇzd´e zaˇr´ızen´ı m˚ uˇze b´ yt v syst´emu pouze jednou. Tud´ıˇz je vhodnˇejˇs´ı struktura Set (mnoˇzina). Bohuˇzel pˇres struktury Set nebo Map nelze iterovat a z´aroveˇ n do nich pˇrid´avat (oproti ArrayList). Tud´ıˇz jsem potˇreboval strukturu s vlastnostmi jako m´a ArrayList a z´aroveˇ n aby neumoˇzn ˇovala duplicity jako struktura Set – takov´ y ArraySet“. ” Naneˇstˇest´ı Java SE neobsahuje takovou strukturu. Po kratˇs´ım hled´an´ı jsme naˇsel nˇekolik implementac´ı ArraySet-u: edu.stanford.nlp.util.ArraySet<E>, [8] com.ibm.wala.util.collections.ArraySet
, [9] soot.util.ArraySet<E>,[10] org.slim3.util.ArraySet<E>[11] Nakonec jsem se rozhodl vytvoˇrit vlastn´ı implementaci, o kter´e budu pˇresnˇe vˇedˇet, jak se chov´a a mohu si j´ı v pˇr´ıpadˇe potˇreby d´ale upravovat. Moje implementace tˇr´ıdy
22
KAPITOLA 3. IMPLEMENTACE
ArraySet dˇed´ı tˇr´ıdu java.util.ArrayList a implementuje interface java.util.Set. (viz obr. 3.4) • boolean add(E) - Pˇrid´av´a element E pr´avˇe tehdy, kdyˇz dan´ y element jeˇstˇe vloˇzen nebyl. • E getLastDuplicity() - vrac´ı instanci posledn´ıho elementu, kter´ y byl vloˇzen podruh´e • int getIndex() - vrac´ı index posledn´ıho elementu, kter´ y byl vloˇzen podruh´e
Obr´azek 3.4: Tˇr´ıda ArraySet<E >
Nyn´ı pop´ıˇsu cel´ y algoritmus vyhled´av´an´ı. Mus´ım zaˇc´ıt od zn´am´eho zaˇr´ızen´ı. Vytvoˇr´ım prvn´ı instanci tˇr´ıdy RouterOSDevice, pˇriˇrad´ım mu pˇr´ıstupovou IP adresu a pˇrid´am ho do seznamu devices typu ArraySet. Prvn´ı, co mus´ım zjistit, jestli je IP adresa zaˇr´ızen´ı dostupn´a. Pro kontrolu dostupnosti se nab´ız´ı pouˇz´ıt metoda InetAddress.isReachable(timeout), ale (jak jsem psal v´ yˇse) nen´ı spolehliv´a. Proto jsem se uch´ ylil k vol´an´ı syst´emov´e funkce Runtime.getRuntime().exec(cmd). Parametr cmd je samozˇrejmˇe upraven podle operaˇcn´ıho syst´emu na pˇr´ısluˇsn´ y tvar. Pokud zaˇr´ızen´ı nen´ı dostupn´e, pˇreskoˇc´ım ho a pokraˇcuji v dalˇs´ım. Pot´e vyzkouˇs´ım moˇznosti pˇrihlaˇsovac´ıch u ´daj˚ u naˇcten´e z CSV souboru accounts.csv. Prvn´ı pˇrihlaˇsovac´ı u ´daje, se kter´ ymi se pˇrihl´as´ım do zaˇr´ızen´ı uloˇz´ım k pˇr´ısluˇsn´e instanci zaˇr´ızen´ı pro pozdˇejˇs´ı pouˇzit´ı. Pokud aktu´aln´ı zaˇr´ızen´ı nem´a informaci o parametru software ID, pak zavol´am funkci, kter´a z´ısk´a z´akladn´ı informace o zaˇr´ızen´ı a uloˇz´ı je. Jako z´akladn´ı informace o zaˇr´ızen´ı povaˇzuji n´azev (identitu), kl´ıˇcov´e software ID, verzi syst´emu platformu a tzv. board. To se t´ yk´a pˇredevˇs´ım prvn´ıho zaˇr´ızen´ı, protoˇze o nˇem z poˇca´tku v´ım jen IP adresu. U ostatn´ıch tyto informace z´ısk´am pomoc´ı MNDP z odpovˇedi na sousedy.
´ C ˇ AST ´ 3.3. LOGICKA
23
Abych z´ıskal potˇrebn´e informace k vykreslen´ı topologie, vol´am postupnˇe n´asleduj´ıc´ı funkce: getInterfaceList(device), getAddresses(device) a getNeighbors(device).
3.3.5
Z´ısk´ an´ı rozhran´ı
Z´ısk´an´ı informac´ı o rozhran´ı je komplikovanˇejˇs´ı. Protoˇze je pomˇernˇe velk´e mnoˇzstv´ı typ˚ u rozhran´ı, nelze je moc dobˇre generalizovat a se z´ısk´av´an´ı informac´ı to nen´ı lehˇc´ı. Pro kaˇzd´ y typ rozhran´ı se mus´ım pt´at zvl´aˇst’. Proto jsem zvolil n´asleduj´ıc´ı postup: 1. Zept´am se, jak´ y typ rozhran´ı je zapnut´ y a je pouˇz´ıv´an. 2. Zept´am se na jednotliv´e typy rozhran´ı, z´ısk´am o nich informace a uloˇz´ım k zaˇr´ızen´ı. 3. Protoˇze “bridge” obsahuje jin´a rozhran´ı, pˇriˇrazuji kaˇzd´emu existuj´ıc´ı a uˇz uloˇzen´a. K z´ısk´an´ı vˇsech rozhran´ı vytvoˇr´ım instanci tˇr´ıdy Sentence s pˇr´ıkazem "interface print". A protoˇze mˇe zaj´ımaj´ı pouze rozhran´ı, kter´a se opravdu vyuˇz´ıvaj´ı (tedy ta co nejsou vypnut´a), pˇrid´am slovo typu Query, parametry name="disabled" a value="false". Tak jak je uvedeno v n´asleduj´ıc´ı uk´azce 3.1. Listing 3.1: Vˇeta pro z´ısk´an´ı rozhran´ı Sentence sentence = Sentence . getS impleS entenc e ( " interface print " ) ; sentence . add ( new Query ( " disabled " , " false " ) ) ;
3.3.6
Z´ısk´ an´ı IP adres
P˚ uvodnˇe jsem chtˇel kaˇzd´emu rozhran´ı pˇriˇradit IP adresu. Jenˇze kaˇzd´e rozhran´ı nemus´ı m´ıt IP adresu. Proto jsem se rozhodl uchov´avat IP adresy stejnˇe jako to maj´ı v RouterOS. Jednoduˇse seznam dvojic IP adresa a rozhran´ı. Souˇcasnˇe ukl´ad´am IPv4 adresu, s´ıt’ a masku, do kter´e tato IP adresa patˇr´ı. To vˇse je uloˇzeno za pomoc´ı tˇr´ıdy IPv4.
3.3.7
Z´ısk´ an´ı soused˚ u
Z´akladn´ım kamenem v´ ysledn´e aplikace je z´ısk´av´an´ı soused˚ u. V momentˇe, kdy jsem pˇripojen na zaˇr´ızen´ı s RouterOS zept´am se ho pomoc´ı pˇr´ıkaz ip neighbor print. T´ım z´ısk´am vˇsechna zaˇr´ızen´ı, kter´a jsou kompatibiln´ı s MNDP. Protoˇze mˇe zaj´ımaj´ı jenom zaˇr´ızen´ı s RouterOS, kter´a se hl´as´ı s parametrem platform=MikroTik, vyuˇziji opˇet Query slovo s t´ımto filtrem (viz. 3.2)
24
KAPITOLA 3. IMPLEMENTACE
Listing 3.2: Vˇeta pro z´ısk´an´ı soused˚ u Sentence soused = Sentence . getS impleS entenc e ( " ip neighbor print " ) ; soused . add ( new Query ( " platform " , " MikroTik " ) ) ;
Z odpovˇedi si vyberu ty ˇca´sti, kter´e potˇrebuji a vytvoˇr´ım z nich novou instanci tˇr´ıdy RouterOSDevice. Tuto novou instanci se pokus´ım pˇridat do seznamu vˇsech zaˇr´ızen´ı. Pokud se pˇrid´a, jedn´a se o nov´e (dosud nezn´am´e) zaˇr´ızen´ı, jinak toto zaˇr´ızen´ı uˇz v syst´emu m´am a uloˇz´ım spojen´ı mezi tˇemito zaˇr´ızen´ımi. Postup proch´azen´ı je totoˇzn´ y s proch´azen´ım stromu do ˇs´ıˇrky. K popisu pouˇziji obr´azek 3.5, B´ıl´e prvky jsou nezn´am´e, ˇcern´e uˇz proˇsl´e a ˇsediv´e ty, co jsou dalˇs´ı v seznamu. Prvn´ı prvek, kter´ y je pˇrid´an do seznamu, je koˇrenem stromu (ˇc´ıslo 1). Dalˇs´ı prvky jsou ty, co soused´ı s koˇrenem (vr´aceny v n´ahodn´em poˇrad´ı). Po koˇrenu se pˇrejde na druh´ y prvek a jeho sousedi se pˇridaj´ı na konec seznamu. Ve tˇret´ım kroku se vytvoˇr´ı pouze spojen´ı mezi prvkem 3 a 6 (na obr´azku zn´azornˇen´e ˇc´arkovanˇe), protoˇze prvek 6 je jiˇz v seznamu obsaˇzen.
Obr´azek 3.5: Prohled´av´an´ı grafu do ˇs´ıˇrky
3.4
Grafick´ aˇ c´ ast
Pouˇzitelnost aplikace urˇcuje rozhran´ı, kter´e uˇzivatel pouˇz´ıv´a. To b´ yv´a nejˇcastˇeji grafick´e. Probl´em vytvoˇren´ı GUI jsem si rozdˇelil na 2 ˇca´sti. Prvn´ım je samotn´e okno, menu, ovl´adac´ı prvky, nastaven´ı atp. Druh´a ˇc´ast je vykreslen´ı topologie. Pro grafickou ˇca´st moj´ı aplikace jsem mohl vyuˇz´ıt tzv. ”GUI Builder”(napˇr´ıklad vestavˇen´ y do IDE). Nebo si ho napsat s´am ruˇcnˇe. Protoˇze v´ım, jak pracuje takov´ y ”GUI
´ C ˇ AST ´ 3.4. GRAFICKA
25
Builder”, rozhodl jsem se spolehnout na vlastn´ı zkuˇsenosti. GUI Builder totiˇz vytv´aˇr´ı spoustu zbyteˇcn´eho k´odu, kter´ y je nepˇrehledn´ y, zbyteˇcnˇe dlouh´ y a tˇeˇzko pochopiteln´ y. Vytvoˇril jsem z´akladn´ı okno typu JFrame, tomu jsem pˇriˇradil liˇstu s menu typu JMenuBar a contentPane typu JPanel. ContentPane obsahuje instanci tˇr´ıdy JScrollPane, aby se pˇri velk´em mnoˇzstv´ı zobrazovan´ ych dat mohly postupnˇe zobrazit vˇsechny. Cel´e to vypad´a jako na obr´azku 3.6.
Obr´azek 3.6: Hlavn´ı okno
Pro vykreslen´ı topologie jsem usoudil, ˇze vlastn´ı implementace by sice moˇzn´a byla, ale daleko v´ yhodnˇejˇs´ı a efektivnˇejˇs´ı je vyuˇz´ıt nˇejakou jiˇz napsanou grafickou knihovnu. Tyto knihovny jsou totiˇz jiˇz otestovan´e a provˇeˇren´e uˇzivateli. Nav´ıc disponuj´ı n´astroji a nastaven´ım, kter´e by mi v pˇr´ıpadˇe vlastn´ı implementace zabraly zbyteˇcnˇe mnoho ˇcasu.
3.4.1
Dostupn´ e grafick´ e knihovny
Lightweight Java Game Library (LWJGL) [12] je knihovna zamˇeˇren´a na poˇc´ıtaˇcov´e hry. Umoˇzn ˇuje program´ator˚ um pˇr´ıstup k jin´ ym knihovn´am dostupn´ ych na vˇsech operaˇcn´ıch syst´emech, jako OpenGL (Open Graphics Library), OpenCL (Open Computing Language) nebo OpenAL (Open Audio Library). Je vhodn´e ji pouˇz´ıt i pˇri 3D hr´ach. LWJGL je dostupn´a pod licenc´ı BSD, coˇz znamen´a, ˇze je open source a volnˇe pouˇziteln´a jak pro dalˇs´ı open source projekty, tak i pro komerˇcn´ı. Za zm´ınku stoj´ı nˇekolik her, kter´e tuto knihovnu
26
KAPITOLA 3. IMPLEMENTACE
pouˇz´ıvaj´ı: Starfarer, Illarion, Sokobano, Cultris II a popul´arn´ı Minecraft. ApacheT M Batik SVG Toolkit [13] je grafick´a knihovna pro aplikace nebo aplety napsan´e v programovac´ım jazyce Java, ve kter´ ych je poˇzadov´ano pouˇzit´ı obr´azk˚ u ve form´atu SVG (Scalable Vector Graphics). Pˇresnˇeji ˇreˇceno je tato knihovna urˇcena pro manipulaci s SVG form´aty. Obsahuje n´astroje pro tvorbu a editaci SVG a export do jin´ ych bitmapov´ ych form´at˚ u jako BMP, JPEG, PNG aj. Je tedy vhodn´a pro vytvoˇren´ı grafick´eho editoru jako je napˇr´ıklad Inkscape [18]. Proto nen´ı vhodn´a do moj´ı aplikace. Graphical Editing Framework (GEF) [14] je open source framework poskytuj´ıc´ı grafick´e editovateln´e prostˇred´ı pro aplikace na platformˇe eclipse. Moment´alnˇe je vyv´ıjen ve dvou verz´ıch - hlavn´ı a novˇejˇs´ı se naz´ yv´a GEF4. Starˇs´ı verzi uˇz nebudou nad´ale rozv´ıjet. GEF je vyd´av´an pod licenc´ı Eclipse Public License v1.0. Uk´azky t´eto knihovny jsou dobˇre pouˇziteln´e a bylo ji moˇzn´e pouˇz´ıt. Avˇsak moje aplikace nen´ı na platformˇe Eclipse, proto jsem tuto knihovnu nevyuˇzil. OpenJGraph [15] je knihovna pro vytvoˇren´ı grafu s moˇznost´ı manipulace a editace. Umoˇzn ˇuje vytvoˇrit orientovan´ y i neorientovan´ y graf, manipulaci a upravovan´ı hran i uzl˚ u. Obsahuje i nˇekter´e algoritmy jako napˇr. hled´an´ı nejkratˇs´ı cesty, hled´an´ı kostry grafu, aj. Knihovna je vyd´av´ana pod licenc´ı GNU Library nebo Lesser General Public License version 2.0 (LGPLv2). Jung - Java Universal Network/Graph Framework [16] - je dalˇs´ı z ˇrady open source knihoven. Umoˇzn ˇuje vytvoˇrit a zobrazit data, kter´a reprezentuj´ı graf nebo poˇc´ıtaˇcovou s´ıt’. Obsahuje sadu algoritm˚ u pro rozloˇzen´ı (Kamada-Kawai, Fruchterman-Reingold, Meyer’s ”Self-Organizing Map”layout, n´ahodn´e rozloˇzen´ı po kruˇznici). Tato knihovna je vhodn´a i pro moji aplikaci. V´ yhodu je velk´e mnoˇzstv´ı uk´azek. Vhodn´ ym kandid´atem byla tak´e knihovna yFiles [17]. Poskytuje algoritmy a komponenty pro anal´ yzu, vizualizaci a automatick´e uspoˇra´d´an´ı grafu, diagramu a s´ıt´ı. M´a tak´e celou sadu pˇr´ıklad˚ u a uk´azek, jak s touto knihovnou pracovat.
3.4.2
NetBeans Visual Library
Nakonec jsem se uch´ ylil ke knihovnˇe, kter´a moˇzn´a nem´a tak rozs´ahl´e moˇznosti jako nˇekter´a pˇredchoz´ı, ale m´a z m´eho pohledu nˇekolik v´ yhod. Je obsaˇzena ve v´ yvojov´em prostˇred´ı NetBeans IDE [19], kter´e jsem pouˇz´ıval k implementaci. Jiˇz jsem mˇel tuto knihovnu nastudovanou a rozumˇel jsem, jak je postavena a jak ji pouˇz´ıt. Z´aroveˇ n m´a jednoduchou demo aplikaci pro uk´azky. Mohl jsem si tak proj´ıt uk´azky a rozhodnout se, kter´e vlastnosti chci pouˇz´ıt. Obsahuje jiˇz pˇreddefinovan´e komponenty, kter´e lze rozˇs´ıˇrit a pˇrizp˚ usobit.
´ C ˇ AST ´ 3.4. GRAFICKA
27
Je postavena na objektech zvan´ ych ”Widget”. Widget je jednoduch´ y visu´aln´ı objekt podobn´ y jako JComponent. Obsahuje informaci o svoj´ı pozici, (preferovan´e) velikosti, fontu, hranici objektu, aj. V aplikaci jsem vyuˇzil zdˇedˇenou tˇr´ıdu IconNodeWidget, ConnectionWidget pro vytvoˇren´ı spoje mezi instancemi tˇr´ıdy Widget, WidgetAction pro vytvoˇren´ı ”akce”. Z´akladem pro zobrazen´ı je jak´esi ”pl´atno”. V t´eto knihovnˇe se naz´ yv´a ”sc´ena”. Rozˇsiˇruj´ıc´ı tˇr´ıdy jsou ObjectScene, GraphScene, GraphPinScene. Jako nejlepˇs´ım kandid´atem se z poˇca´tku jevila tˇr´ıda GraphPinScene. Ta totiˇz umoˇzn ˇuje spojen´ı jen mezi tzv. ”piny”, kter´e jsou pˇriˇrazen´e k uzlu. Jako uzel by bylo zaˇr´ızen´ı a jako pin by byl port na tomto zaˇr´ızen´ı. Bohuˇzel, jak jsem psal v´ yˇse, nebylo vˇzdy moˇzn´e z´ıskat informace, kter´ y spoj je od kter´eho portu zapojen. Proto jsem nakonec musel zvolit GraphScene. Dalˇs´ı d˚ uleˇzit´a vˇec je rozloˇzen´ı - tzv. ”layout”. K dispozici jsou GraphLayout, GridGraphLayout, TreeGraphLayout a UniversalGraph. Prakticky je jedno, kter´e rozvrhnut´ı se vybere. Jelikoˇz je poˇc´ıtaˇcov´a s´ıt’ obvykle ”strom”, pouˇzil jsem TreeGraphLayout. Vytvoˇril jsem tˇr´ıdu RouterOSWidget, pro kterou jsem zdˇedil IconNodeWidget. Ta reprezentuje zaˇr´ızen´ı s RouterOS. Kaˇzd´a instance obsahuje odkaz na datovou instanci tˇr´ıdy RouterOSDevice. A z kaˇzd´e instance RouterOSWidget lze spustit program WinBox s pˇrihlaˇsovac´ımi u ´daji na konkr´etn´ı zaˇr´ızen´ı 3.7. Protoˇze se v jedn´e pods´ıti vid´ı vˇsechna zaˇr´ızen´ı jako vedle sebe, nem´a smysl propojovat kaˇzd´e s kaˇzd´ ym (i kdyˇz to tak je v datov´e ˇca´st´ı uloˇzeno). Proto jsem vytvoˇril dalˇs´ı tˇr´ıdu NetworkWidget, kter´a reprezentuje pods´ıt’. K tomuto ”widgetu”jsou pˇripojeny jednotliv´e RouterOSWidget, kter´e do t´eto pods´ıtˇe patˇr´ı.
28
KAPITOLA 3. IMPLEMENTACE
Obr´azek 3.7: Uk´azka aplikace
Kapitola 4 Testov´ an´ı Z d˚ uvodu nedostupnosti re´aln´e poˇc´ıtaˇcov´e s´ıtˇe (o v´ıce jak 2 zaˇr´ızen´ıch MikrotTik) prob´ıhalo testov´an´ı aplikace na simulovan´e poˇc´ıtaˇcov´e s´ıti V programu GNS3 (viz 2.2.3). Tento program poskytuje re´alnou simulaci s moˇznost´ı zmˇeny topologie. Topologie, na kter´ ych jsem aplikaci testoval, jsem volil tak, aby odpov´ıdaly re´aln´e poˇc´ıtaˇcov´e s´ıti. V praxi je ˇcasto pouˇz´ıvan´a zapojen´ı tzv. do hvˇezdy, zapojen´ı za sebou a pro redundanci se vyuˇz´ıv´a i kruh. Pˇri zapojen´ı do kruhu samozˇrejmˇe nesm´ı b´ yt vˇsechna spojen´ı propustn´a, aby s´ıt’ fungovala tak, jak m´a. Nadbyteˇcn´e spoje se m˚ uˇze deaktivovat ruˇcnˇe (odpojen´ım kabelu, vypnut´ım portu) nebo za pomoc´ı Spaning Tree Protokolu (STP) nebo jinou jeho verz´ı - RSTP, MSTP, VSTP nebo PVST. Nezapomnˇel jsem ani na nˇekolik smˇerovaˇc˚ u mezi s´ıtˇemi.
Obr´azek 4.1: Topologie hvˇezda
Obr´azek 4.2: Topologie kruh
29
30
´ ´I KAPITOLA 4. TESTOVAN
Obr´azek 4.3: Topologie ˇretˇez
Kapitola 5 Vysledky a rozˇ s´ıˇ ren´ı aplikace V´ ysledn´a aplikace systematicky proch´az´ı poˇc´ıtaˇcovou s´ıt’ a dynamicky vykresluje zaˇr´ızen´ı s RouterOS v s´ıti. Vyuˇz´ıv´a k tomu propriet´arn´ı protokol MNDP spoleˇcnosti MikroTik. Po vykreslen´ı je moˇzn´e si prohl´ıdnout ˇca´steˇcnou strukturu s´ıtˇe a pˇripojit se pomoc´ı programu WinBox na vyhledan´a zaˇr´ızen´ı. Pˇri pˇripojen´ı jiˇz nen´ı nutn´e zad´avat pˇrihlaˇsovac´ı u ´daje. Nejvˇetˇs´ı prostor pro rozˇs´ıˇren´ı aplikace je v grafick´em rozhran´ı a podp˚ urn´ ych n´astroj´ıch. D˚ uvodem, proˇc je grafick´e rozhran´ı jednoduch´e je skuteˇcnost, ˇze to nebylo c´ılem t´eto pr´ace. Aplikaci by bylo vhodn´e rozˇs´ıˇrit o export dat do obecnˇe pouˇz´ıvan´ ych form´at˚ u jako jsou PDF nebo XML. Vhodn´ y by byl form´at, kter´ y podporuje program The Dude 2.2.1 a je moˇzn´e ho do tohoto programu importovat. Pˇripojen´ı k zaˇr´ızen´ı bylo implementov´ano pouze pomoc´ı API. Vhodn´e by bylo implementovat pˇripojen´ı pomoc´ı protokolu SSH, protoˇze ten je (na rozd´ıl od API) ve v´ ychoz´ım stavu zapnut´ y. Konfigurace aplikace by bylo pˇr´ıjemnˇejˇs´ı prov´adˇet pˇr´ımo z grafick´e nadstavby. Moment´alnˇe se nastavuje pouze IP adresa prvn´ıho zaˇr´ızen´ı. Seznam pˇrihlaˇsovac´ıch u ´daj˚ u je uloˇzen v CSV soubouru, kter´ y je nutn´e editovat ruˇcnˇe (v jin´em editoru).
31
Kapitola 6 Z´ avˇ er Nastudoval jsem protokol NDP (Neighbor Discovery Protocol) a moˇznosti dynamick´eho vykresleni topologie poˇc´ıtaˇcov´e s´ıtˇe. Prozkoumal jsem moˇznosti vzd´alen´e spr´avy zaˇr´ızen´ı Mikrotik a zjistil, jak´e jsou klady a z´apory. Zjistil jsem, jak´e jsou dostupn´e moˇznosti pro centr´aln´ı spr´avu s´ıtˇe s grafickou podporou a navrhl vlastn´ı ˇreˇsen´ı. Vlastn´ı ˇreˇsen´ı oproti st´avaj´ıc´ım je zamˇeˇreno na zaˇr´ızen´ı MikroTik. Jedin´ ym konkurentem je program The Dude 2.2.1. Z´asadn´ı v´ yhodou m´e aplikace oproti st´avaj´ıc´ım ˇreˇsen´ım, je v systematick´em hled´an´ı soused˚ u v s´ıti. Vyhled´av´an´ı soused˚ u se obvykle prov´ad´ı skenov´an´ım rozsahu s´ıtˇe, tak jak to dˇel´a program The Dude. M´a aplikace nevytv´aˇr´ı duplicitn´ı zn´azornˇen´ı zaˇr´ızen´ı, tak jako program The Dude. Aplikace zat´ım nen´ı plnohodnotnou alternativou ke komerˇcn´ım variant´am. Nicm´enˇe jedn´a se o prvn´ı verzi tohoto programu a pˇri dalˇs´ım rozvoji by se mohla st´at konkurentem na trhu.
32
Literatura [1] Oracle, The Java Tutorials, 2011 . http://download.oracle.com/javase/tutorial/. [2] MikroTik Neighbor Discovery Protocol . http://www.mikrotik.com/testdocs/ros/3.0/system/mndp.php. [3] Manual:API . http://wiki.mikrotik.com/wiki/API. [4] CSVReader . http://www.csvreader.com/java csv.php. [5] GNS3 . http://www.gns3.net. [6] Cisco Packet Tracer . https://www.netacad.com/web/about-us/cisco-packet-tracer. [7] Nagios. http://www.nagios.com. [8] edu.stanford.nlp.util.ArraySet. http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/util/ArraySet.html. [9] com.ibm.wala.util.collections.ArraySet. http://wala.sourceforge.net/javadocs/trunk/com/ibm/wala/util/collections/ArraySet.html. [10] soot.util.ArraySet. http://www.sable.mcgill.ca/soot/doc/soot/util/ArraySet.html. [11] org.slim3.util.ArraySet. http://slim3.googlecode.com/svn/tags/1.0.9/slim3/javadoc/org/slim3/util/ArraySet.html. 33
34
LITERATURA
[12] Lightweight Java Game Library (LWJGL). http://lwjgl.org/. [13] ApacheT M Batik SVG Toolkit. http://xmlgraphics.apache.org/batik/. [14] Graphical Editing Framework (GEF). http://www.eclipse.org/gef//. [15] OpenJGraph. http://freecode.com/projects/openjgraph/. [16] Java Universal Network/Graph Framework (JUNG). http://jung.sourceforge.net/. [17] yFiles for Java. http://www.yworks.com/en/products yfiles about.html. yFiles for JavaFX . http://www.yworks.com/en/products yfilesjavafx about.html. [18] Inksacpe. http://www.inkscape.org/cs/. [19] Netbeans IDE . https://netbeans.org/. [20] Wireshark . http://www.wireshark.org/. [21] Wine. http://www.winehq.org/. [22] Cisco Discovery Protocol Version 2 . http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cdp/configuration/15-mt/cdp15-mt-book/nm-cdp-discover.html. Discovery Protocols. www.cisco.com/c/en/us/td/docs/net mgmt/active network abstraction/37/reference/guide/ANARefGuide37/discover.html. [23] LAN/MAN Standards Committee of the IEEE Computer Society. IEEE Std 802.1AB-2009 (Revision of IEEE Std 802.1AB-2005), IEEE Standard for Local
LITERATURA
35
and metropolitan area networks–Station and Media Access Control Connectivity Discovery. https://standards.ieee.org/getieee802/download/802.1AB-2009.pdf. [24] Pavel Satrapa Internet Protokol verze 6, tˇret´ı vyd´an´ı. Praha 2011, CZ.NIC, z.s.p.o. http://knihy.nic.cz/files/nic/edice/pavel satrapa ipv6 2012.pdf.
Pˇ r´ıloha A Seznam zkratek, znaˇ cek a symbol˚ u • NDP = Neighbor Discovery Protocol • MNDP = MikroTik Neighbor Discovery Protocol • API = Application Programmable Interface • CLI = Command Line Interface • MAC = Media Access Control • IP = Internet Protocol • TCP = Transmission Control Protocol • GPL = GNU General Public License • CPU = Central Processing Unit • NAS = Network Attached Storage • IOS = Internetwork Operating System (od Cisco) • ISO = International Organization for Standardization • OSI = Open Systems Interconnection • SNMP = Simple Network Management Protocol • SSH = Secure Shell • SQL = Structured Query Language • OSPF = Open Shortest Path First 36
37 • BGP = Border Gateway Protocol • VM = Virtual Mashine • GNS = Graphical Network Simulator • RAM = Random-Access Memory • OS = Operating System • OOP = Object-oriented programming • JRE = Java Runtime Enviroment • PHP = Personal Home Page • CSV = Comma-separated values • GUI = Graphical User Interface • SVG = Scalable Vector Graphics • BMP = Bitmap Image File • PNG = Portable Network Graphics • IDE = Integrated Development Environment • RSTP = Rapid Spanning Tree Protocol • MSTP = Multiple Spanning Tree Protocol • VSTP = VLAN Spanning Tree Protocol • PVST = Per-VLAN Spanning Tree • VLAN = Virtual Local Area Network
Pˇ r´ıloha B Tˇ r´ıda ArraySet<E > Listing B.1: Tˇr´ıda ArraySet<E > /* * * @author Bc . Michal Hanzlik * @param <E > */ public class ArraySet <E > extends ArrayList <E > implements java . util . Set <E > { private E present ; private int index = -1; public ArraySet () { super () ; } /* * * Prida prvek jen tehdy , kdyz dany prvek jeste v ~ mnozine neni . * Vyuziva metodu equals () * @param element Vkladany prvek * @return TRUE jestlize byl prvek pridan , jinak FALSE * @see getLastDuplicity () * @see getIndex () */ @Override public boolean add ( E element ) { if ( this . size () == 0) { super . add ( element ) ; return true ; }
38
39 for ( int i = 0; i < this . size () ; i ++) { E e1 = this . get ( i ) ; if ( element . equals ( e1 ) ) { // jestli uz v ~ seznamu je this . index = i ; this . present = e1 ; return false ; // vrat false } else if ( i == ( this . size () - 1) ) { super . add ( element ) ;
// pridat a vratit true
return true ; } } return false ; } /* * * Vraci prvek posledniho vkladane duplicity . * @return element */ public E getLastDuplicity () { return present ; } /* * * Vraci index posledniho vkladane duplicity . * @return index */ public int getIndex () { return index ; } }
Pˇ r´ıloha C Diagramy
Obr´azek C.1: Dalˇs´ı vyuˇzit´e tˇr´ıdy
40
41
Obr´azek C.2: RouterOSDevice
Pˇ r´ıloha D N´ avod na propojen´ı GNS3 s PC Tento n´avod popisuje, jak propojit lok´aln´ı poˇc´ıtaˇc se simulovanou s´ıt´ı v programu Graphical Network Simulator (GNS3). N´avod je zamˇeˇren na operaˇcn´ı syst´em Microsoft Windows. Pouˇzit´a konfigurace: • Microsoft Windows 7 64bit • GNS3 verze 0.8.6
D.1
Nainstalov´ an´ı program˚ u
Prvn´ı je potˇreba st´ahnout a nainstalovat potˇrebn´e programy. GNS3 je moˇzn´e st´ahnout na ofici´aln´ıch str´ank´ach http://www.gns3.net/. GNS3 nen´ı tˇreba instalovat. Staˇc´ı st´ahnout ZIP archiv pro pˇr´ısluˇsnou verzi operaˇcn´ıho syst´emu (32/64 bit) nebo bal´ıˇcek, kter´ y obsahuje obˇe verze. Po rozbalen´ı obsahuje sloˇzka s programem spustiteln´ y EXE soubor.
D.2
Vytvoˇ ren´ı s´ıt’ov´ eho pˇ ripojen´ı
V simulovan´e s´ıti mus´ı b´ yt z´astupce lok´aln´ıho poˇc´ıtaˇce. Ten se pˇripoj´ı na tzv. ”loopback”s´ıt’ov´ y adapt´er. Ten je potˇreba vytvoˇrit. Vytvoˇr´ı se pomoc´ı ”Pr˚ uvodce pˇrid´an´ı hardwaru”. 1. Kliknout na start 2. Vyhledat ”cmd” 3. Spustit ”cmd”jako administr´ator 42
ˇ ´I S´ITOV ˇ ´ ˇ ´I D.2. VYTVOREN EHO PRIPOJEN
43
4. Spustit ”hdwwiz.exe” V druh´em kroku pr˚ uvodce zvolte poloˇzku ”Nainstalovat hardware, kter´ y vyberu ze seznamu”a klepnˇete na tlaˇc´ıtko ”Dalˇs´ı”. (viz obr´azek D.1) Ve tˇret´ım kroku zvolte typ hardwaru ”S´ıt’ov´e adapt´ery”a klepnˇete na tlaˇc´ıtko ”Dalˇs´ı”.(viz obr´azek D.2) Ve ˇctvrt´em kroku zvolte v´ yrobce ”Microsoft”a s´ıt’ov´ y adapt´er ”Microsoft Loopback Adapter”a klepnˇete na tlaˇc´ıtko ”Dalˇs´ı”. (viz obr´azek D.3) Pokraˇcujte a dokonˇcete instalaci. Toto s´ıt’ov´e rozhran´ı si pro lepˇs´ı identifikaci pojmenujeme ”Loopback”. (viz pbr´azek D.4)
Obr´azek D.1: Pr˚ uvodce - Krok 2
Obr´azek D.2: Pr˚ uvodce - Krok 3
Obr´azek D.3: Pr˚ uvodce - Krok 4
Obr´azek D.4: Seznam pˇripojen´ı k s´ıti
ˇ ´ILOHA D. NAVOD ´ PR NA PROPOJEN´I GNS3 S PC
44
D.3
Nastaven´ı projektu
V projektu vyberte z dostupn´ ych prvk˚ u (viz D.5 bod 1) prvek nazvan´ y ”S´ıt’”(Cloud) (bod 2) a myˇs´ı ho pˇret´ahnˇete na ”pl´atno”. Kliknˇete na tento prvek prav´ ym tlaˇc´ıtkem myˇsi a zvolte poloˇzku ”Nastavit”. Na kartˇe ”NIO Ethernet”v sekci ”Generic Ethernet NIO”vyberte s´ıt’ov´ y adapt´er ”MS LoopBack Driver”s n´azvem ”Loopback”.(viz D.6 bod 4.) a pˇridejte tlaˇc´ıtkem ”Pˇridat”(bod 5.). V seznamu pˇriˇrazen´ ych adapt´er˚ u by se mˇel tento prvek objevit (bod 6.).
Obr´azek D.5: Nastaven´ı - Krok 1
Nyn´ı m´ate propojen´e PC se simulovan´em prostˇred´ı v programu GNS3.
D.3. NASTAVEN´I PROJEKTU
Obr´azek D.6: Nastaven´ı - Krok 2
45
Pˇ r´ıloha E Obsah pˇ riloˇ zen´ eho CD K t´eto pr´aci je pˇriloˇzeno CD, na kter´em jsou uloˇzeny zdrojov´e k´ody a funkˇcn´ı spustiteln´a aplikace. • Adres´aˇr Aplikace: - lib - Grafick´e knihovny - app - Obsahuje program winbox.exe - accunts.csv - Pˇrihlaˇsovac´ı u ´daje - start.bat - Spustiteln´ y soubor. - TDM.jar - Zkompilovan´e zdrojov´e soubory • Adres´aˇr Diplomov´a pr´ace: - obr - Adres´aˇr s pouˇzit´ ymi obr´azky. - hanzlmi4.pdf - Tato diplomov´a pr´ace. • Adres´aˇr Src - Zdrojov´e soubory aplikace • Adres´aˇr Zdroje - 802.1AB-2009.pdf - IEEE 802.1AB standard (LLDP) - pavel satrapa ipv6 2012.pdf - Internetov´ y protokol IPv6, Pavel Satrapa
46