SNMP je jednoduchý, široce rozšířený a užitečný standardizovaný protokol, který slouží k získávání nebo nastavování hodnot na určitém zařízení. Obdobou je například WMI od firmy Microsoft. Podporu SNMP má velká řada zařízení, například aktivní síťové prvky, počítačová čidla, tiskárny, přístupové body nebo pomocí softwaru a ovladačů ji mohou získat osobní počítače a servery. Hodnoty můžeme získávat v pravidelném intervalu a ty pak jednoduše ukládat do databáze spolu s časem a následně vykreslit do grafu. Přehledně tak můžeme zobrazit třeba vytížení procesoru, průběh teploty nebo datový tok na portu přepínače.
Jak SNMP funguje
Protokol SNMP vyžaduje pro komunikaci dvě strany. Jednou entitou je správce (manager) a druhou agent. SNMP pracuje ve dvou režimech činnosti:
- Správce posílá dotazy agentovi a přijímá odpovědi. Hodnoty tedy může získávat i více správců a mohou se ptát kdykoliv.
- Agent zasílá oznámení (trapy) na adresu správce. V nějakých definovaných situacích (překročení nějaké hodnoty nebo i v pravidelném intervalu) odesílá agent jednomu správci hodnoty.
Protokol SNMP nyní existuje ve třech verzích. SNMPv1 a SNMPv2c používají pro autentizaci community string, v podstatě textové heslo. V SNMPv3 je možno využít autentizaci pomocí jména a hesla a šifrování.
SNMP používá pro komunikaci UDP protokol, díky čemuž je velmi rychlé, ale může dojít ke ztrátě (nedoručení) zasílané informace (paketu). Od verze 2 je implementována kontrola doručení, takže ke ztrátě by nemělo dojít. Standardně se používá port 161 (SNMP) na straně agenta (pro dotazy) a port 162 (SNMPTRAP) na straně serveru (pro trapy). Klient, který posílá dotaz, zvolí dynamický port, z kterého posílá dotaz na port 161. Agent odpovídá z portu 161 na dynamický port klienta. V praxi je pro každý dotaz použit jiný dynamický port.
SNMP paket
Dotaz a odpověď
verze | community string | PDU typ | ID dotazu | error status | error ID | OID | hodnota |
Příklad
1 | public | GET (0) | 8 | no error (0) | 0 | 1.3.6.1.4.1.311.1.1.3.1.1.1 | NULL |
Pro trapy
verze | community | PDU typ | enterprise | agent IP | gen trap | spec trap | čas | objekt 1 hodnota 1 | ... |
Community string je heslo pro SNMPv1 a SNMPv2c, PDU typ je typ SNMP dotazu.
SNMP dotazy
Klasická komunikace, kdy posílám dotaz na jednu hodnotu a následně přijímám odpověď, probíhá následovně:
- odešle se dotaz – nastaví se typ GET, zadá se OID pro zjišťovanou hodnotu, vlastní hodnota se nastaví na NULL
- vrátí se odpověď – typ je nastaven na RESPONSE (2), OID na dotazovanou hodnotu a je vyplněna hodnota
Další možné typy dotazů jsou SNMP GET (0) – vrátí jednu hodnotu, GET-NEXT (1) - vrátí další hodnotu (vezme následující OID za zadaným). Od verze 2 GET-BULK, který vrací více hodnot najednou (například pro všechny porty přepínače). Pomocí SNMP můžeme hodnoty nejen číst, ale také zapisovat, k tomu slouží typ SET. Trapy mají trochu jiný formát paketu, jako typ je TRAP. Ještě jsou speciální typy NOTIFICATION, INFORM a REPORT.
MIB databáze – Management Information Base
Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID - Object Identifier. OID je tvořeno posloupností čísel oddělených tečkou, tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo. Celá tato stromová struktura je uložena v MIB databázi. Navíc MIB databáze obsahuje jména a popisy jednotlivých hodnot (OID). MIB databáze může být doplněna o další hodnoty pomocí části struktury uložené v MIB souboru.
Příkladem OID může být třeba hodnota 1.3.6.1.2.1.2.2.1.6.1, které odpovídá textová verze z MIB databáze iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifPhysAddress.
Pro vlastní práci se SNMP nepotřebujeme MIB databázi, v SNMP paketu figuruje pouze OID, ale pokud neznáme správné OID, tak nám databáze může pomoci k jeho dohledání.
Software pro SNMP
MIB Browser je velice dobrý a užitečný program pro prohlížení MIB databáze s možností přidávání MIB souborů a dotazů na zařízení. Druhým užitečným programem je Paessler SNMP Tester, který sice neobsahuje MIB databázi, ale má zase několik funkcí navíc. Dovede provádět dotazy v SNMPv1, SNMPv2c i SNMPv3 a také má užitečnou funkci SNMP WALK pro výpis všech OID daného zařízení.
- nástroje pro SNMP
- MIB Browser
- Paessler SNMP Tester
- Net-SNMP - SNMP příkazy do command line
- Getif - různé nástroje
- popis SNMP
- MIB soubory různých výrobců
- MIB validátor
Je to pecka článek o SNMP!!Dost mi pomohl!!
odpověď na [1]Tulinko: Děkuji, takovýhle komentář vždy potěší . Samotnému mě dalo práci pořádně pochopit, jak SNMP funguje a přitom je to tak jednoduché .
My musíme mít totiž o tom takou jako by seminární práci!!A každý si musel vybrat jeden z protokolů, tak jsem si vybral SNMP!! a mám to už hotové, tak teď jen čekám na vyhodnocení!!tak děkuji za dobré zpracování na této stránce!!
Článek mi také pomohl .. díky .. a přídám si tě mezi RSS :).
Moc pekně popsané, konečně jsem to pochopil :) Dík
Výborný článek. Díky moc.
Zajimalo by mne, zda a jak se daji resit kolize v MIB databazich, pokud nejaky vyrobce zarizeni ma stejne cislo OID jako jiny. Musim pak nejak resit od jakeho agenta mam tuto zpravu? Diky.
odpověď na [7]Frantisek Urbanek: Kolize by nastávat neměli a já se s žádnými nesetkal. Ale i kdyby se objevili, tak to není žádný problém. MIB databáze slouží spíše pro referenci a pro formát návratových (a hlavně výčtových) hodnot. Pokud posílám na nějaké zařízení dotaz s nějakým OID, tak prostě dostanu odpověď a je mi jedno, že jiné zařízení má pod tímto OID jiné hodnoty.
Diky za odpoved. Myslel jsem to (ciste teoreticky) tak, ze pokud mam nejake zarizeni, kde treba monitoruju zatizeni CPU pomoci OID 1.2.3.4.5 a nekdo mi to zarizeni vymeni a tam bude pro 1.2.3.4.5 treba pocet odeslanych paketu, tak se nebudu stacit divit
Díky moc, radim se k tem, co o SNMP vedeli kulovy a diky tobe tomu tak jiz neni
odpověď na [9]Frantisek Urbanek: Kazdy vyrobce ma vlastni OID, takze ke kolizim by nemelo dojit. A ani neni moc duvod, proc pouzivat cizi MIBku jinym zpusobem. U beznych zarizeni jsem se s tim jeste nesetkal.
Výborný článek
Diky za supr clanek!
pekny obrazek paketu je na : http://www.rane.com/note161.html
odpověď na [13]noe: Pěkný popis.
Já nejradši pro rozebrání paketu používám Wireshark, kterým si zachytím komunikaci a pak si můžu paket pěkně prohlédnout na skutečných datech.
Ahoj, super clanek. Ja bych potřeboval v Linuxech na jednom PC mít nainstalovaného managera a na druhém PC agenta a monitorovat z PC s agentem třeba teplotu procesoru a ten by mi to posílal na PC kde je nainstalovaný manager. Musím něco v agentovy nastavovat aby mi tyto informace posílal po síti nebo se nastavuje v managerovy ip adresa dotazovaného PC a OID. A ještě bych poprosil o informaci jestli agent i manager jsou součástí jednoho balíčku(a musim pak akorát neják speifikovat ktreý PC je manager) nebo se instalují každý jednotlivě(popřípadě jestli by jste mi napsal název demona, který pracuje jako agent a demona , ktery pracuje jako manager pro linux)? Díky moc za odpověď
odpověď na [15]David: Na začátek. Nepracuji s Linuxem, takže mohu poradit pouze jak to chodí pod Windows (ale obecně to bude podobné). To, čeho chcete dosáhnout, je možné, ale ...
Ve Windows (stanice/server) je pro zprovoznění SNMP agenta potřeba doinstalovat komponenty. Jsou to dvě služby (daemon) SNMP Service a SNMP Trap Service. SNMP Service nakonfigurujeme (nastavíme autentizaci a které části SNMP povolíme). Podle typu stanice/server a služeb se automaticky zprovozní určité MIB (skupiny běžných OID), na které pak počítač odpovídá nebo může odesílat trapy (to jsem nikdy nezkoušel). Podrobnosti se dají nalézt u MS (nebo stačí vyzkoušet, některá běžná OID).
Složitější je druhá strana, tedy SNMP správce. Asi ani nemůže existovat nějaká univerzální služba, protože existuje ohromné množství variant, co a jak chceme dělat. Pro testování načítání hodnot můžeme použít MIB Browser nebo NetSNMP. Pro pouhé ukládání nebo zobrazování hodnoty na webové stránce můžeme použít jednoduchý skript nebo malý prográmek v PHP. Ale pro serióznější práci potřebujeme nějaký monitorovací nástroj, který pak zobrazuje i grafy nebo reaguje na načtené hodnoty. Příkladem takových programů je Cacti, Nagios, HP SIM a další. Při konfiguraci ve správci je třeba znát IP agenta, OID, autentizační údaje.
Přesně popis jak má bejt....stručnej a výstižnej! Díky moc za tenhle článek
Prave jsem na jednu Win masinu nainstaloval balik net-snmp a pokousim se vycitat vytizeni procesoru. Jsem ale uplne zmatenej z MIB a OIDs.
Pochopil jsem z toho, ze net-snmp pouziva jakysi UCDavis podstrom a napriklad vytizeni procesoru by melo byt na vetvi ".1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2" ale to mi vraci v MibBrowseru stale cislo 1 a v snmpget.exe jakousi chybu
c:>snmpget -v2c -c public 10.0.1.9 .1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2
Unlinked OID in HOST-RESOURCES-MIB: host ::= { mib-2 25 }
Undefined identifier: mib-2 near line 9 of C:/usr/share/snmp/mibs/hostmib.mib
SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyStatus."_none_".1.2 = INTEGER: active(1)
Jak se da zjistit, ktere OID vydava hodnotu vyuziti procesoru? Surfoval jsem po strankach MS, ale neco mi rika, ze net-snmp implementace si bude brat od systemu data a muze je cpat do sveho stromu, ktery se muze od toho MS stromu lisit. Na Wiki projektu net-snmp jsem tez zadny se znam OIDs pro Windows port nenasel...
Mozna by to jeste chtelo clanecek na tema MIBs a OIDs..
L:
odpověď na [18]Lazna: NetSNMP jsem vždy používal pouze jako klienta a ne jako server. Na stránkách jsem našel, že tam nějaký daemon je, ale nevím jaké informace dokáže ze systému získat. Standardně se ale používá SNMP služba od MS, které je přímo ve Windows.
MIB databáze = OID strom, jeho základní struktura je dána standardizační organizací, takže se "nemůže" lišit. Nejpoužívanější podstrom je .1.3.6.1 (iso.org.dod.internet). Pod ním se nachází určité společné podstromy, které mají pomoci získávat stejné hodnoty z různých systémů stejnou cestou. Další podstromy jsou přiděleny přímo jednotlivým výrobcům, které používají pro své proprietární účely.
Najít OID pro určitou hodnotu není jednoduché. Obecně nám k tomu MIB soubory výrobce nebo přímo MIB databáze, v které se ale nedá zrovna jednoduše hledat. Takže většinou je lepší hledat na netu, ale ani to není jednoduché.
Zatížení procesoru z Windows (MS služba) by mělo být na OID .1.3.6.1.2.1.25.3.3.1.2 (host device processorLoad). MIB je třeba www.oidview.com/mibs/0/HOST-RESOURCES-MIB.html. Myslím, že jsem kdysi četl, že Windows to za určitých podmínek nezobrazují správně.
Super článek, díy moc. Avšak mám dotaz, potřeboval bych monitoring celé sítě, resp. aby šlo vidět nejlépe v grafech jaká stanice vysílala, přjímala, kolik přenesla a v jaký čas a pokud možno kam. Neznáte někdo něco takového?
odpověď na [20]david: Nejlépe by to asi splňovala technologie NetFlow (i když záleží na detailech, do kterých chcete jít). O NetFlow snad taky něco napíšu nebo stačí kouknout na webu.
Ahá děkuju za odpověď, teď jen zjistit, žda-li cisco ASA 5505 nebo 5510 tuto technollogii podporuje, věřím že ano
odpověď na [22]david: NetFlow se používá hlavně na routerech. Takže spíš bych to hledal na centrálním prvku, kterým routujete VLANy.
VLANy routujeme právě přes ASU 5505. Zkusím se podívat zda-li podporuje netflow. Děkuji
Musím říci, že se trafic značně snížil tím, že jsem zrušil telnet a nyní mi chodí třeba i 500 reportů denně o snažení připojení k portu 23. Přece jen telnet je slaběji zabezpečen než SSH.
na monitoring site neni potreba netflow, staci kupr ASUS 500gp router v nema nahrany DD-WRT firmware a aplikace wallwatcher (z asus-u se posila kompletni log prenosu skrze nej - rozumej ne obsah ale pouze kdo s kym na jakem portu ;) a loguje se to do databaze :) cisco je trosku jinde s cenou ;)
Moc děkuji za detailní vysvětlení SNMP komunikaci. Moc děkuji za pomoc a poporu.
odpověď na [20]david: zkuste Zenoss
Pěkný článek, jen jsem se tu nedozvěděl, jaký je rozdíl mezi objektem OID a instancí OID. Náš vyučující na sítě to chce v testu vědět, ale nikde jsem o tom nic nenašel. Mě jako programátorovi připadá objekt a instance úplně stejné...
Chvály bylo dost, ale i tak se k ní musím přidat. Pěkně a jednoduše napsáno. Málo kde se najde něco napsané jak pro blbce, aby to pochopil každý.
Ale trochu kritiky - míchají se tu pojmy: Agent, Klient, správce, server. Trochu jsem se v tom ztrácel a hledal jsem co jsou sysnonyma.
odpověď na [30]Michal: Díky .
SNMP využívá klasický princip klient-server. Na klientovi běží agent a na serveru manager. Trochu matoucí může být, že tradičně zjišťujeme informace ze serverů, ale z pohledu SNMP o nich mluvíme jako o klientech.
Perfektní článek. V několika řádcích řečeno vše :o) Hodně mi pomohl. Díky
DAkujem za mnohe clanky, snazim sa vyucovat siete na jednej strednej skole a niektore veci mi dost pomohli
Chtěl bych se zeptat, jaký se dá použít software na sbírání SNMP od UPS ? Potřeboval bych monitorovat baterii, teplotu, popřípadě ještě nějaké další informace přes s´tový kabel.Všechny UPS jsou připojené na síti. Ať už placený či ne. Děkuji za případné info
Oodpověď na [34]PO: : Na Linuxu doporučuji Network UPS Tools (NUTS) - upsstats.
Dobrý den,
mám dotaz, mám nainstalovaný ovladač tiskárny Xerox, který přes protokol SNMP posílá na tiskárnu get-request 1.3.6.1.2.1.25.3.2.1.5.1 a tím neustále probouzí ventilátor na CPU v tiskárně. Když vypnu správu tisku tak přestane toto posílat, tiskárna nehučí, ale já nemohu tisknout. Po opětovném zapnutím, začne opět tiskárnu každou minutu pingovat jestli tam je. Mám Win7. Lze nějakým způsobem zasáhnout a snížit alespoň počet dotazů na minimum? Kde a jak to nastavím? Peerblock mi SNMP protokol nezablokuje, nevíte třeba jakým programem tuto síťovou komunikaci zablokovat? Windows firewall i SNMP protokol jsem vypnul, ale pakety z meho počítače chodí dál.
mail na mě je jaroslav.crha(zavináč)post.cz
odpověď na [34]PO: Zabbix
Ahoj, odkazy na MIB jsou detus. Nebo chtějí podporu, MIB jsou až 10 let staré. Nemáte někdo aktuální zdroje?