Network Monitor 0.7.0
  1. Popis programu
  2. Použití
  3. Konfigurační soubor
  4. Paralelní linky
  5. Router s více rozhraními
  6. Ampersand v XML
  7. Křížení linek
  8. Definice sdružených zařízení
  9. Zobrazení zatížení linek (není podporováno ve verzi 0.7.0)

1) Popis programu

Jedná se o konzolovou aplikaci, která má k dispozici topologii sítě. Tato struktura je včetně různých nastavení uložená v souboru formátu XML (viz. kapitola Konfigurační soubor). Network Monitor (dále jen Netmon), načte tyto data do paměti a poté testuje dostupnost jednotlivých PC v síti pomocí funkce ping. Po dokončení této operace bude mít každé PC definovaný stav. Výstupem programu je HTML stránka s obrázkem PNG, kde je nakreslena síť v aktuálním stavu. Výsledná stránka se vytváří pomocí zadané šablony.

Co je nového ve verzi 0.7.0

- velikost výsledného obrázku je nyní dána počtem a velikostí buňek v horizontálním a vertikálním směru
- při prvním spuštění je vygenerován soubor s příponou .con, ve kterém jsou uloženy "spojení". Při příštím spuštění se čte z tohoto souboru. Pokud dojde ka jakékoliv změně daného konfinguračního souboru, je soubor .con generován nový (což chvilku trvá).
- linky jsou nyní vytvářeny zcela libovolně (přímé i několikanásobně lomené čáry apod.)
- pořadí textu na routerech je dáno pořadím vlastností "name", "ip" a "comment" v konfiguračním souboru
- nová grafika pro linky a routery (typ routeru má nyní styl "shadow" kterým lze zapnout stínování)
- linka má nový atribut "underconst" který linky označí jako ve výstabě čili modrou barvou
- pokud obsahuje router typ, který nebyl definován, je vypsána chyba a program se ukončí
- předělán systém paralelních linek
- sdružená zařízení, viz. část 8
- podpora znaku ampersand v xml souboru, viz. část 6
- změny v konfiguračním souboru jsou pospány v části Konfigurační soubor.

Změny jednotlivých verzí jsou zapsány v souboru changelog. Pokud budete mít probémy s instalací, kontaktujte mě na ICQ: 93289181.

Ke stáhnutí (aktuální verze 0.7.0)

Spustitelný program pod Windows - winbin_0.7.0.zip (1.2 MB s příkladem)
Zdrojové kódy zkompilovatelné pod VS.NET 2003 - winsrc_0.7.0.zip (2.2 MB s GD knihovnou)
Zdrojové kódy pro GCC (Linux) - netmon_0.7.0.tgz (300 kB)

Nutno podotknout, že zdrojové kdy jsou identické, jen jsou trochu jinak uspořádané. Pod Linuxem je třeba mít nainstalované knihovny Expat (XML Parser), GD (grafická knihovna) a Ping (program pinghost).

V balíčku najdete testovací konfigurační soubory config.xml. Náhled sítě:

Netmon je freeware. To znamená, že ho můžete šířit a dál upravovat pod licencí GNU General Public License.

Zpět

2) Použití

Nejprve je třeba správně vytvořit datový soubor s konfigurací sítě (viz. kapitola Konfigurace sítě). Dále je třeba mít připraven zdrojový soubor HTML stránky, který slouží jako šablona výstupního souboru.

Program lze spustit z příkazové řádky příkazem:

C:\Nemon\Netmon.exe --v --config=configurace.xml

Volitelné parametry:

Název Význam

--v

Verbose. Zobrazí podrobné informace v průběhu testování sítě.
--mainrouter=router Přetíží nastavení "mainrouter" v konfiguračním souboru.
--config=file.xml Specifikuje vlastní konfigurační soubor, jinak se použije implicitně soubor "/opt/netmon/config.xml".
--t | --test Netmon pouze zkontroluje konfigurační soubor a vrátí výsledek testu tzn. že netestuje síť ani negenuruje výslednou mapu.
--sl Potlačí vykreslování linek mezi routery.
--help | --h Zobrazí popis parametrů.

Zpět

3) Konfigurační soubor

Data sítě jsou uložena ve formátu XML. V tomto souboru jsou uloženy tyto informace:

  • nastavení chování programu
  • cesty k potřebným souborům
  • grafická podoba různých typů zařízení na síti
  • seznam zařízení
  • seznam sdružených zařízení
  • seznam linek mezi nimi

a) Nastavení chování programu

Název tagu Význam Povinný a výchozí hodnota
horizontal_cells Počet buňek mřížky ve vodorovném směru.
ano
vertical_cells Počet buňek mřížky ve svislém směru.
ano
cell_width Šířka jedné buňky v pixelech.
ne, 110
cell_height Výška jedné buňky v pixelech.
ne, 70
deffont Definuje plnou cestu k TT fontu, který je použit při generování výsledného obrázku. Pokud tento atribut není definován, použijí se nativní fonty knihovny GD (a to i v případě, že daný font není nalezen).
ne, použije se výchozí fonty knihovny GD
maxpingattempts Počet pokusů při testování zařízení na síti. Doporučená hodnota tohoto atributu je 2. Nedostupné routery se tak zbytečně netestují 3x.
ne, 3x
pingtimeout Maximální doba čekání na odpověď v milisekundách. Záleží na typu sítě. Na rychlé metalické síti může být hodnota nižší, druhý extrém je wifi, kde by hodnota neměla být menší než 2000 milisekund.
ne, 1000 ms
mainrouter Jméno hlavního routeru. Z toho routeru se pak provádí monitoring a toto jméno je i uvedeno ve výsledném HTML dokumentu. V šabloně je vloženo místo tagu %%MAINROUTER%%.
ne, musí být nastaven alespoň parametrem, jinak netmon skončí

<configuration>
   <!-- graphics options -->
   <imagesize>770 530</imagesize>
   <deffont>c:/windows/fonts/arial.ttf</deffont>

   <!-- ping options -->
   <maxpingattempts>2</maxpingattempts>
   <pingtimeout>2000</pingtimeout>
   <mainrouter>YOUR_MAIN_ROUTER</mainrouter>

...pokračuje dalším nastavením...

b) Cesty k potřebným souborům

Název tagu Význam Povinný a výchozí hodnota
reshtmlpath Cesta a název souboru výsledné HTML stránky.
ne, "index.htm"
respngpath Cesta a název PNG obrázku se zobrazením stavu sítě. Tento odkaz je pak vložen do výsledného HTML dokumentu místo tagu %%SRCPIC%%.
ne, "result.png"
sourcepath Cesta a název šablony HTML stránky. Datum, obrázek, mapa, hlavní router a verze používají speciální tagy: %%DATE%%, %%AREA_MAP%%, %%SRCPIC%%, %%MAINROUTER%% a %%VERSION%%. Tyto znaky jsou při generování nahrazeny správnými hodnotami. Hlavní router je definován v konfiguračním souboru.
ano
loadfile Cesta souboru, ve kterém jsou uložena data zatížení linek, AP a ethernetového segmentu. Struktura tohoto souboru je popsána dále.
ne, zobrazení zatížení bude ignorováno
appngpath Cesta k souboru antény u AP s jednou anténou.
ano
appng2path Cesta k souboru antény u AP se dvěma sektory.
ano
lanpngpath Cesta k souboru obrázku označující ethernetový segment.
ano

  <paths>
   <!-- result's paths -->
   <reshtmlpath>result.html</reshtmlpath>
   <respngpath>result.png</respngpath>

   <!-- source's paths -->
   <sourcepath>source.html</sourcepath>
   <loadfile>load.xml</loadfile>
  </paths>
</configuration>

c) Sekce routertypes - typy zařízení na sítí

Název tagu Význam Povinný a výchozí hodnota
rid Unikátní ID typu, pomocí kterého se na typ odkazujete. ano
dimension Rozměr boxu zařízení na výsledné mapě. ne, 68x38
color Barva boxu na výsledné mapě. Formát je RGB: R G B. ne, černá
information

Další příznaky zařízení: ip, location, name. Pokud jsou tyto příznaky přítomny, na boxu se zobrazí příslušná informace. Kromě toho můžete definovat barvu a velikost popisku a to v následujícím formátu. Např: comment(R, G, B, S), kde R, G a B jsou barevné složky a S je velikost v bodech (parametr S není povinný). Pokud je S záporné, vybírají se nativní fonty knihovny GD v rozmezí 0 až -4. V kladných hodnotách se použije TT font pokud je definován, v opačném případě se opět vybere nativní font.
Příznak border zapne kolem boxu rámeček. Parametry mají následující formát: (W, R, G, B), kde W je šířka čáry rámečku a R, G a B jsou barevné složky.

ne
shadow Pokud je tato hodnota true, nastaví pěkný stín u krabiček zařízení. ne, false
switch Pokud je tento příznak nastaven na true, bude tato třída zařízení brána jako switch na síti a není možná určit, zda-li takové zařízení žije, tudíž linky k takovému zařízení budou vždy zelené. ne, false

<routertype>
  <rid>0</rid>
  <!-- dimensions of the router box -->
  <dimension>70 40</dimension>
  <!-- RGB format -->
  <color>84 180 229</color>
  <!-- text on the box -->
  <information>ip location(128,100,50) name(0,0,0,5) border(1,0,0,0)</information>
</routertype>

d) Sekce linetypes - typy linek na sítí

Název tagu Význam Povinný a výchozí hodnota
lid Unikátní ID typu, pomocí kterého se na typ odkazujete.
ano
width Šířka čáry v pixelech.
ne, 3
linedesc Popisek, který se zobrazí jako tooltip na lince.
ne, prázdný řetězec

<linetype>
  <lid>0</lid>  
  <width>2</width>   
  <linedesc>100Mbit</linedesc>
</linetype>

e) Seznam zařízení na síti

Název tagu Význam Povinný a výchozí hodnota
name Název zařízení, které se zobrazí na boxu.
ano
rtype ID typu routeru definované výše v souboru.
ano
position Pozice na mapě v souřadnicích mřížky.
ano
ip IP adresa, na kterou se zařízení testuje. Tímto tagem nadefinujete výchozí rozhraní. Tento tag můžete vynechat a výchozí rozhraní nastavit v sekci interfaces. Popis v části 5.
ne
comment

Dodatečná informace o zařízení primárně určená pro umístění.

ne, prázdný řetězec
routerurl Odkaz, který bude umístěn na ploše boxu zařízení.
ne, prázdný řetězec
lansegment Parametr určí, zda-li je zařízení obsahuje LAN rozhraní a nakreslí značku vedle boxu. Může nabývat true nebo false hodnot.
ne, false
lanurl Odkaz, který bude umístěn na značku LAN rozhraní v případě, že předchozí parametr je true.
ne, prázdný řetězec
accesspointtype Parametr určí, zda-li je zařízení je AP a nakreslí značku vedle boxu. Může nabývat 0 pro router bez AP, 1 pro AP s jednou anténou a 2 pro AP se dvěma sektory.
ne, 0
apurl Odkaz, který bude umístěn na značku AP rozhraní v případě, že předchozí parametr je true.
ne, prázdný řetězec
underconst Tento tag nastavený na true způsobí, že daný router se bude pokládat explicitně za mimo provoz a všechny linky k němu vedoucí půjdou do modra.
ne, false
essid ID sítě, tento řetězec bude umístěn na značku AP.
ne, prázdný řetězec
ap2url Platí pouze u AP se dvěma sektory. Definuje odkaz na druhý sektor.
ne, prázdný řetězec
essid2 Platí pouze u AP se dvěma sektory. Definuje ESSID druhého sektoru.
ne, prázdný řetězec
interfaces umožňuje definovat více rozhraní, podrobný popis je v části 5
ne, prázdný řetězec

Kromě těchto atributů má každé zařízení definováno unikátní ID v rámci konfiguračního souboru. Pomocí tohoto ID se na router můžeme odkazovat z definice linky (viz. dále). Toto ID je přímo v tagu router jako routerID.

<router routerID="JMENOZARIZENI">
  <name>JMENOZARIZENI</name>
  <rtype>2</rtype>
  <ip>10.26.128.41</ip>
  <location>LOKACE</location>
  <routerurl>http://www.apweb.cz/</routerurl>      
  <position>35 117</position>
  <lansegment>true</lansegment>
  <lanurl></lanurl>
  <accesspointtype>1</accesspoint>
  <apurl></apurl>
  <essid>ESSID AP</essid>   
</router>

f) Seznam linek mezi zařízeními

Název tagu Význam Povinný a výchozí hodnota
ltype

ID linky, linky se definují pomocí tagu linetype (viz. výše).

ano
lineurl Odkaz, který je umístěn na lince. Může odkazovat třeba na statistiky apod.
ne, prázdný řetězec
ltitle Titulek, který je zobrazen na lince. Pokud není tento parametr zadán, nastaví se implicitní titulek (viz. tabulka výše).
ne, prázdný řetězec
underconst Tento příznak (hodnota true) zaručí, že linka bude explicitně modrá. Může například vyjadřovat, stav trvale linky mimo provoz nebo ve výstavbě.
ne, false

Linka obsahuje atributy, kterými se odkazuje na zařízení, které spojuje. Tyto ID jsou definovány výše u zařízení. ID je přímo u tagu line jako connection ve formátu "ROUTER1_ID ROUTER2_ID".

<line connection="ROUTER1 ROUTER2">
  <ltype>1</ltype>
  <ltitle>1</ltitle>
  <lineurl>http://router1/stats/wlan1.htm</lineurl>
  <underconst>true</underconst>
</line>

O tom jak linku připojit na konkrétní interface je pojednáno v části 5.

Zpět

4) Paralelní linky

Netmon umožňuje definovat více linek mezi dvěma routery. V tomto případě musí být obě linky v konfiguračním soubory za sebou.

Příklad:

...
<line connection="ROUTER1 ROUTER2">
  <ltype>1</ltype>
  <ltitle>1</ltitle>
  <lineurl>http://10.26.128.5/stats/wlan1.htm</lineurl>
</line>
...
<line connection="ROUTER1 ROUTER2">
  <ltype>1</ltype>
  <ltitle>2</ltitle>
  <lineurl>http://10.26.128.5/stats/wlan2.htm</lineurl>
</line>
...

V tomto případě se natáhnou mezi routery ROUTER1 a 2 dvě linky. Současná verze podporuje až dvě paralelní linky. Definicie linek již nemusí být IHNED za sebou jako v předchozí verzi a ani nezáleží na pořadí, duležité je, aby obě linky měly stejné názvy routerů (včetně pořadí).

Zpět

5) Router s více rozhraními

Router může mít nyní více síťových rozhraní, které jsou použity u linek (viz. dále ). Obecně se rozhraní definuje takto:

<router routerID="JMENOZARIZENI">
  ...
  <interfaces>
     <interface>
        <name>eth0</name>
        <ip>48.2.1.8</ip>
     </interface>
     ...dalsi rozhrani...
  </interfaces>
  ...
</router>

Takto jsme definovali rozhraní eth0 s požadovanou IP adresou. Aby konfigurační soubor byl zpětně kompatibilní, umožňuje nechat tag IP i vně tagu interfaces (prostě tak jak to bylo). V tomto případě se vytvoří default rozhraní (bezejmenné). Toto rozhraní se vytvoří i tak, že při definici nového rozhraní vynecháte jméno (čili tag name). Default rozhraní je důležité pokud nechcete explicitně vyjadřovat na které rozhraní je linka připojena. Z toho plyne, že starý konfigurační soubor bude fungovat beze změn tak, že každý router bude mít jedno default rozhraní a linky spojí právě tyto rozhraní.

Router, na který je linka připojena, nyní může mít více rozhraní. K těm se přistupuje přes operátor ":" (dvojtečka). Například:

<line connection="ROUTER1:eth0 ROUTER2:eth1">
  <ltype>1</ltype>
  <ltitle>1</ltitle>
  <lineurl>http://router1/stats/wlan1.htm</lineurl>
</line>

Předpoklad je, že router ROUTER1 má rozhraní eth0 a ROUTER2 rozhraní eth1. Pokud neuvedete žádné rozhraní, použije se default rozhraní. Díky tomu je konfigurační soubor zpětně kompatibilní a nemusíte všechny rozhraní explicitně pojmenovat.

Pro kontrolu je dobré použít parametr verbose (--v), zde je totiž vidět které rozhraní se testuje.

Zobrazení IP adresy na routeru
Pokud má router definovaný default rozhraní, zobrazí se jeho IP (samozřejmě pokud je povoleno), v opačném případě se zobrazí IP jeho prvního rozhraní.

Chybové stavy:

Pokud konfigurátor připojí linku na rozhraní, které není definované v tagu router, program vypíše chybu a skončí.

Pokud se pokusí připojit na default rozhraní a toto rozhraní daný router nemá (čili všechna jeho rozhraní mají jména a vnější tag ip není použit), program vypíše varování a linku připojí na první definované rozhraní (to pojmenované).

Zpět

6) Ampersand v XML souboru

Protože XML parser použitý v netmonu si z neznámých důvodů neporadí se znakem ampersand (&) a to ani ve formě konstanty, použil jsem speciální sekvenci ";amp", která je při parsingu nahrazena právě tímto znakem.

Příklad, do XML souboru zapište cestu v tomto formátu:

<line connection="ROUTER1:eth0 ROUTER2:eth1">
  <ltype>1</ltype>
  <ltitle>1</ltitle>
  <lineurl>http://router1/stats/wlan1.htm?haf=1;ampmnau=2</lineurl> </line>

Výše uvedená cesta bude v programu interpretována jako "http://router1/stats/wlan1.htm?haf=1&mnau=2".

Zpět

7) Křížení linek

Během hledání cest se může stát, že některé linky překříží již inku existující. Algoritmus není neomylný a pokud je alternativní cesta příliš složitá, raději zvolí křížení.

Jak se toho zbavit?
Nejlépe změnit pořadí linek v konfiguračním souboru, aby se linka která kříží jinou linku, vypočítavala dříve. Pak se s velkou pravděpodností druhá linka přepočítá zcela jinak.

Zpět

8) Definice sdružených zařízení

Netmon umožňuje barevně odlišit skupinu zařízení pomocí sdružování. Objekt pro sdružení se nachází v části clouds za definici zařízení a má následující parametry:

Název tagu Význam Povinný a výchozí hodnota
cborder

Barva okraje boxu ve formátu RGB. Pokud je tento tag vynechán, box je bez okraje.

ne, bez okraje
ccolor Barva boxu ve formátu RGB.
ne, žlutá barva
cedge Šířka okraje boxu v pixelech.
ne, 7 pixelů

Zařízení, které spadají do daného boxu jsou definovány jako atribut routers a následuje seznam ID všech zařízení.

Příklad:

<clouds>
  <cloud routers="ROUTER1 ROUTER2">
    <cborder>0 0 0</cborder>
    <ccolor>230 255 200</ccolor>
  </cloud>
  <cloud routers="ROUTER3 ROUTER4">
    <cborder>0 0 0</cborder>
    <ccolor>190 240 255</ccolor>
    <cedge>8</cedge>
  </cloud>
  <cloud routers="ROUTER5 ROUTER6 ROUTER7">
    <cborder>0 0 0</cborder>
    <ccolor>255 240 190</ccolor>
    <cedge>7</cedge>
  </cloud>
</clouds>

Omezení: Sdružená zařízení by měla být pokud možno stejného typu, nebo alespoň stejných rozmerů, jinak systém nebude pracovat správně.

Zpět