SNMP is a simple, widely used, and useful standardized protocol that serves to obtain or set values on a specific device. An analogy is, for example, WMI from Microsoft. A wide range of devices support SNMP, such as active network elements, computer sensors, printers, access points, or personal computers and servers can acquire it through software and drivers. We can obtain values at regular intervals and then simply store them in a database along with the time and subsequently plot them on a graph. We can thus clearly display, for instance, CPU utilization, temperature progression, or data flow on a switch port.
How SNMP works
The SNMP protocol requires two parties for communication. One entity is the manager and the other is the agent. SNMP operates in two modes of activity:
- The manager sends queries to the agent and receives responses. Thus, multiple managers can obtain values and can ask at any time.
- The agent sends notifications (traps) to the manager's address. In certain defined situations (exceeding some value or even at regular intervals), the agent sends values to one manager.
The SNMP protocol now exists in three versions. SNMPv1 and SNMPv2c use a community string for authentication, essentially a text password. In SNMPv3, it's possible to use authentication via username and password and encryption.
SNMP uses the UDP protocol for communication, making it very fast, but the sent information (packet) may be lost (not delivered). Since version 2, delivery confirmation has been implemented, so loss should not occur. By default, port 161 (SNMP) is used on the agent side (for queries) and port 162 (SNMPTRAP) on the server side (for traps). The client sending the query chooses a dynamic port from which it sends the query to port 161. The agent responds from port 161 to the client's dynamic port. In practice, a different dynamic port is used for each query.
SNMP packet
Query and response
version | community string | PDU type | request ID | error status | error ID | OID | value |
Example
1 | public | GET (0) | 8 | no error (0) | 0 | 1.3.6.1.4.1.311.1.1.3.1.1.1 | NULL |
For traps
version | community | PDU type | enterprise | agent IP | gen trap | spec trap | time | object 1 value 1 | ... |
Community string is the password for SNMPv1 and SNMPv2c, PDU type is the type of SNMP query.
SNMP queries
The classic communication, where I send a query for one value and then receive a response, proceeds as follows:
- a query is sent – the type is set to GET, the OID for the queried value is entered, the value itself is set to NULL
- a response is returned – the type is set to RESPONSE (2), the OID to the queried value, and the value is filled in
Other possible query types are SNMP GET (0) – returns one value, GET-NEXT (1) - returns the next value (takes the next OID after the given one). From version 2, GET-BULK, which returns multiple values at once (for example, for all switch ports). With SNMP, we can not only read values but also write them, for which the SET type is used. Traps have a slightly different packet format, with TRAP as the type. There are also special types NOTIFICATION, INFORM, and REPORT.
MIB database – Management Information Base
Each value in SNMP is uniquely identified by a numeric identifier OID - Object Identifier. The OID is formed by a sequence of numbers separated by dots; this value is created by taking the OID of the parent element and appending a dot and the current number. This entire tree structure is stored in the MIB database. Additionally, the MIB database contains names and descriptions of individual values (OIDs). The MIB database can be supplemented with additional values using a part of the structure stored in a MIB file.
An example of an OID could be the value 1.3.6.1.2.1.2.2.1.6.1, which corresponds to the text version from the MIB database iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifPhysAddress.
For actual work with SNMP, we don't need the MIB database; only the OID figures in the SNMP packet, but if we don't know the correct OID, the database can help us find it.
Software for SNMP
MIB Browser is a very good and useful program for browsing the MIB database with the ability to add MIB files and query devices. Another useful program is Paessler SNMP Tester, which doesn't contain a MIB database but has several additional functions. It can perform queries in SNMPv1, SNMPv2c, and SNMPv3 and also has a useful SNMP WALK function for listing all OIDs of a given device.
- tools for SNMP
- MIB Browser
- Paessler SNMP Tester
- Net-SNMP - SNMP commands for command line
- Getif - various tools
- SNMP description
- MIB files from various manufacturers
- MIB validator
Je to pecka článek o SNMP!!;-)Dost mi pomohl!!:-)
respond to [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.
respond to [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 ;-)
respond to [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
respond to [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ěď
respond to [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:
respond to [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?
respond to [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
respond to [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.
respond to [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.
respond to [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
Orespond to [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
respond to [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?