Laboratorní práce: SNMP - Linux snmputils Petr Grygárek, VŠB-TU Ostrava, FEI Cílem této laboratorní práce je naučit se pracovat s proměnnými SNMP s použitím PC s OS Linux s a utilit snmputils. Propojte rozhraní eth0 PC s OS Linux a nainstalovaným balíkem snmputils s portem 1 přepínače Cisco Catalyst 2900. Na přepínači nakonfigurujte IP adresu pro management na VLAN 1 (jinak je konfigurace přepínače implicitní): conf t int vlan 1 ip addr 10.0.0.10 255.255.255.0 no shutdown exit Na příkaz no shutdown nezapomeňte, management rozhraní je implicitně deaktivováno. SNMP agent je na přepínači aktivován implicitně. Je pouze třeba stanovit community string (heslo) pro čtení, resp. zápis proměnných MIB: snmp-server community RD ro snmp-server community WR rw V našem případě je heslo pro čtení RD a pro zápis WR. Na PC nakonfigurujte adresu rozhraní eth0 tak, aby patřila do stejné podsítě jako management adresa přepínače: ifconfig eth0 10.0.0.100 netmask 255.255.255.0 Výpis celé větve MIB stromu Abychom si udělali představu o proměnných MIB podporovaných daným SNMP agentem, můžeme si nejprve celý strom podporovaných proměnných vypsat. Pro postupný průchod zadanou větví stromu můžeme využít zprávy SNMP GET_NEXT_REQUEST. Její opětové zasílání a postupné vypisování výsledků zajistí utilita snmpwalk. Nejvhodnější uzel stromu, od kterého prohlížení začít, je iso.org.dod.internet.mgmt.mib-2, číselně 1.3.6.1.2. Právě v tomto uzlu totiž v stromu univerzálních identifikátorů objektů spravovaném organizací ISO začíná větev obsahující SNMP MIB: snmpwalk -c RD -v 1 -O f 10.0.0.10 iso.org.dod.internet.mgmt.mib-2 Základními parametry snmpwalk jsou IP adresa SNMP agenta a OID uzlu, odkud se má průchod stromem zahájit. Dále je nutné přepínačem -c zadat jméno komunity (heslo pro čtení), přepínačem -v specifikovat verzi protokolu SNMP a volitelně přepínačem -O f stanovit, že výpis má obsahovat celé jméno proměnné v textové formě jako cestu od kořene stromu. OID počátečního uzlu stromu lze zadat také v číselné formě: snmpwalk -c RD -v 1 -O f 10.0.0.10 1.3.6.1.2
Ve skutečnosti jde ve správě SNMP GET_REQUEST vždy OID v číselné formě a přemapování textového jména na číselný ekvivalent je věcí statických převodních tabulek, které mají programy balíku snmputils k dispozici. Poznámka: MIB-II má stejný prefix OID jako MIB-I, byly pouze dodefinovány nové větve a listové objekty (proměnné). Čtení a zápis skalární proměnné MIB Čtení a zápis skalární proměnné MIB si ukážeme na jménu zařízení. Příslušnou proměnnou najdeme v MIB stromu ve větvi system pod uzlem MIB2. Tuto informaci najdeme buďto v RFC popisujícím MIB-2, nebo ji zjistíme z předchozího výpisu všech proměnných utilitou snmpwalk:.iso.org.dod.internet.mgmt.mib-2.system.sysname.0 V číselném vyjádření je cesta ve stromě k proměnné sysname reprezentována sekvencí 1.3.6.1.2.1.1.5.0 Pro čtení obsahu proměnné MIB z Linuc PC můžeme použít utilitu snmpget, která má následující syntaxi parametrů: snmpget <IP_adresa_agenta> <OID_proměnné_MIB> Dále je třeba zadat přepínače, které mají stejný význam jako u utility snmpwalk: snmpget -c RD -v 1 -O f 10.0.0.10.iso.org.dod.internet.mgmt.mib-2.system.sysName.0 snmpget -c RD -v 1 -O f 10.0.0.10 1.3.6.1.2.1.1.5.0 Jestliže budeme nyní chtít jméno zařízení změnit, musíme požadovanou hodnotu do příslušné proměnné naopak zapsat. K tomu lze použít příkaz snmpset -c WR -v 1 10.0.0.10 -O f.iso.org.dod.internet.mgmt.mib-2.system.sysname.0 \ s NOVEJMENO Parametry jsou obdobné příkazu snmpget. Předposlední parametr s udává, že zapisovaná hodnota NOVEJMENO je typu string. Zkratky používané pro jednotlivé datové typy lze najít v dokumentaci programu snmpset (man snmpset). OID lze samozřejmě i zde zadat v číselné formě. Jestli se nastavení nového jména povedlo, můžeme snadno ověřit opětovným použitím příkazu snmpget: snmpget -c RD -v 1 -O f 10.0.0.10.iso.org.dod.internet.mgmt.mib-2.system.sysName.0
Čtení a zápis tabulky Čtení a zápis tabulky si ukážeme na tabulce MAC adres, podle které přepínač přeposílá rámce a kterou se naučí automaticky na základě zdrojových MAC adres přicházejících rámců. Nejprve musíme zjistit jméno (resp. OID) proměnné MIB, která tabulku MAC adres reprezentuje. K tomu se podíváme do RFC 1493, které popisuje proměnné MIB, jež musí implementovat všechny mosty (a tedy i přepínače) manažovatelné protokolem SNMP. V dokumentu se snadno zorientujeme nahlédnutím do kapitoly 3.1, která ukazuje celkovou strukturu podstromu MIB proměnných pro mosty. Dalším studiem RFC1493 snadno zjistíme, že tabulka MAC adres má OID.iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1Tp.dot1dTpFdbTable, číselně 1.3.6.1.2.1.17.4.3. Zjistíme také, že tabulka je polem (sequence) řádků - záznamů typu dot1dtpfdbentry, které vždy obsahují MAC adresu, číslo portu, za kterým MAC adresa leží a stavový kód. Dynamicky naučená MAC adresa je reprezentována stavovým kódem 3. Obsah tabulky MAC adres bychom tedy teoreticky mohli vypsat příkazem snmpwalk -c RD -v 1 -O f 10.0.0.10 \.iso.org.dod.internet.mgmt.mib2.dot1dbridge.dot1tp.dot1dtpfdbtable Jelikož však některé verze snmputils nemají tabulky pro mapování textových jmen spadajících do Bridge MIB na OID, musíme odpovídající OID zadat číselně: snmpwalk -c RD -v 1 -O f 10.0.0.10 1.3.6.1.2.1.17.4.3 V RFC1493 (kapitola 5) dále zjistíme, jak jsou označovány jednotlivé sloupce tabulky MAC adres: (continuation.1.1. 0.2.179.43.108.202) 1.3.6.1.2.1.17.4.3.1.1 MAC adresa (string šesti dvojic hexadecimálních číslic oddělených mezerami) 1.3.6.1.2.1.17.4.3.1.2 číslo portu (integer) 1.3.6.1.2.1.17.4.3.1.3 stavový kód (integer) Dočteme se tam také dále, že jednotlivé řádky sloupců jsou v případě tabulky MAC adres indexovány MAC adresami samotnými, tedy k prefixu OID sloupce musíme připojit 6 dalších čísel (6B MAC adresy). Pokusme se nyní najít v tabulce MAC adres adresu připojeného Linux PC. Nejprve si zjistěte, jakou MAC adresu má rozhraní eth0 vašeho Linux PC: ifconfig eth0 eth0 Link encap:ethernet HWaddr 00:02:B3:2B:6C:CA inet addr:10.0.0.100 Bcast:10.255.255.255 Mask:255.255.255.0 Pozor, bajty MAC adresy je ve výpisu ifconfig odděleny dvojtečkami, zatímco v MIB mezerami! Řetězec "00 02 B3 2B 6C CA" můžeme najít v datech vyprodukovaných utilitou snmpwalk při požadavku na výpis tabulky MAC adres. V případě naší MAC adresy jsme nalezli řádek
.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.179.43.108.202 = Hex-STRING: 00 02 B3 2B 6C CA Převedeme-li sekvenci 0.2.179.43.108.202 do hexadecimálního vyjádření, dostaneme právě sekvenci 00 02 B3 2B 6C CA. Prefix.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1 indikuje, že se jedná o sloupce nesoucí MAC adresu. Číslo portu, za kterým tato MAC adresa leží, najdeme výpisem proměnné s OID tvořené prefixem 1.3.6.1.2.1.17.4.3.1.2 následovaným šesti bajty hledané MAC adresy (0.2.179.43.108.202):.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.179.43.108.202 = INTEGER: 13 PROC 13 A NE 1? NEVIM... NEJSEM SI JIST, ZDA JSEM TO OPRAVDU MEL V JEDNICCE. MOZNA TAKY CISCO CISLUJE PORTY NEJAK SLOZITEJI, SNAD JE V TOM ZAHRNUTO CISLO MODULU. Podobně výpisem proměnné s OID tvořené prefixem 1.3.6.1.2.1.17.4.3.1.3 následovaným šesti bajty hledané MAC adresy najdeme stavový kód naučené adresy:.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.179.43.108.202 = INTEGER: 3 Z RFC1493 víme, že kód 3 reprezentuje stav learned, tedy MAC adresu naučenou dynamicky. Pro úplnost uvedeme ještě skutečný výpis části stromu MIB reprezentující tabulku MAC adres, jak jej vyprodukovala utilita snmpwalk. Situace se jeví tak, jako by každému portu byla výrobcem přiřazena nějaká vlastní MAC adresa z rozsahu 00 02 16 1B 0C 80-00 02 16 1B 0C 98..iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.128 = Hex-STRING: 00 02 16 1B 0C 80.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.129 = Hex-STRING: 00 02 16 1B 0C 81.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.130 = Hex-STRING: 00 02 16 1B 0C 82.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.131 = Hex-STRING: 00 02 16 1B 0C 83.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.132 = Hex-STRING: 00 02 16 1B 0C 84.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.133 = Hex-STRING: 00 02 16 1B 0C 85.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.134 = Hex-STRING: 00 02 16 1B 0C 86.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.135 = Hex-STRING: 00 02 16 1B 0C 87.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.136 = Hex-STRING: 00 02 16 1B 0C 88.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.137 = Hex-STRING: 00 02 16 1B 0C 89.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.138 = Hex-STRING: 00 02 16 1B 0C 8A.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.139 = Hex-STRING: 00 02 16 1B 0C 8B.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.140 = Hex-STRING: 00 02 16 1B 0C 8C.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.141 = Hex-STRING: 00 02 16 1B 0C 8D.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.142 = Hex-STRING: 00 02 16 1B 0C 8E.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.143 = Hex-STRING: 00 02 16 1B 0C 8F.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.144 = Hex-STRING: 00 02 16 1B 0C 90.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.145 = Hex-STRING: 00 02 16 1B 0C 91.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.146 = Hex-STRING: 00 02 16 1B 0C 92.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.147 = Hex-STRING: 00 02 16 1B 0C 93.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.148 = Hex-STRING: 00 02 16 1B 0C 94.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.149 = Hex-STRING: 00 02 16 1B 0C 95.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.150 = Hex-STRING: 00 02 16 1B 0C 96.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.151 = Hex-STRING: 00 02 16 1B 0C 97.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.22.27.12.152 = Hex-STRING: 00 02 16 1B 0C 98.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.1.0.2.179.43.108.202 = Hex-STRING: 00 02 B3 2B 6C CA
.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.128 = INTEGER: 40.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.129 = INTEGER: 13.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.130 = INTEGER: 14.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.131 = INTEGER: 15.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.132 = INTEGER: 16.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.133 = INTEGER: 17.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.134 = INTEGER: 18.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.135 = INTEGER: 19.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.136 = INTEGER: 20.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.137 = INTEGER: 22.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.138 = INTEGER: 23.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.139 = INTEGER: 24.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.140 = INTEGER: 25.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.141 = INTEGER: 26.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.142 = INTEGER: 27.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.143 = INTEGER: 28.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.144 = INTEGER: 29.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.145 = INTEGER: 31.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.146 = INTEGER: 32.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.147 = INTEGER: 33.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.148 = INTEGER: 34.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.149 = INTEGER: 35.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.150 = INTEGER: 36.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.151 = INTEGER: 37.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.22.27.12.152 = INTEGER: 38.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.2.0.2.179.43.108.202 = INTEGER: 13.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.128 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.129 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.130 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.131 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.132 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.133 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.134 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.135 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.136 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.137 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.138 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.139 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.140 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.141 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.142 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.143 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.144 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.145 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.146 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.147 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.148 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.149 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.150 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.151 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.22.27.12.152 = INTEGER: 4.iso.org.dod.internet.mgmt.mib-2.17.4.3.1.3.0.2.179.43.108.202 = INTEGER: 3