Home   Profil   Fun
Cacti-Training buchen
#73 Linux  17.04.2009

Beispiele für SNMP-Abfragen


SNMP oder simple network management protocol dient zur zentralen Überwachung und Steuerung von Netzwerkgeräten. Dieser Artikel enthält einige Abfrage-Beispiele zur Verwendung von SNMP.

Auf Debian erhält man mit dem Paket snmp die Client-Kommandozeilenprogramme (z.B. snmpwalk) mit denen man SNMP-Abfragen auf Geräte (den darauf laufenden SNMP-Agents) durchführen kann. Das Debian-Paket snmpd ist ein solcher Agent, ein Dämon, der auf den Geräten läuft, die abgefragt werden sollen (Client-Dämon, Port 161/UDP). Er liefert die gewünschten Daten wenn man zum Beispiel mit snmpwalk Daten dieses Gerätes abfragen möchte. Mit anderen Worten, auf allen Geräten, die überwacht werden sollen muss snmpd installiert sein. Für Abfragen reicht das Paket snmp.

In den folgenden Beispielen werden die Abfragen vom selben System aus ausgeführt, wo auch der Agent läuft (localhost). Der Communityname ist 'localro'. Da es nur lesende Abfragen sind wird hier die Protokollversion 2c verwendet. Diese bietet generell keinerlei Schutz, da der Communityname im Klartext übermittelt wird. Für schreibende Operationen sollte mindestens Version 3 verwendet werden.


Ausgabe aller OIDs in Textform als Baum.
snmptranslate -Of -Tp | less

Ausgabe aller OIDs in Textforum und numerisch.
snmptranslate -Of -Tl | less

Ausgabe aller OIDs nur numerisch.
snmptranslate -Of -To | less

Zu den Parametern siehe man snmpcmd und man snmptranslate.


Abfrage verschiedener Tabellen.
snmpwalk -v2c -c localro localhost interfaces

snmpwalk -v2c -c localro localhost system

snmpwalk -v2c -c localro localhost ipAddrTable


Abfrage eines einzelnen Wertes mit Angabe der MIB.
snmpget -v2c -c localro localhost SNMPv2-MIB::sysORUpTime.1

Im folgenden Beispiel handelt es sich um die Uptime des snmpd, nicht um die Uptime des hosts.
snmpget -v2c -c localro localhost sysUpTime.0

Bei Tabellen ist klar, dass man immer einen Index am Ende mit angibt (.1, .2 etc.). Außer bei snmpgetnext muss auch bei skalaren Objekten immer der Index (.0) mit angegeben werden, sonst erhält man eine Fehlermeldung.
snmpget -v2c -c localro localhost sysUpTime.0 sysLocation.0

snmpgetnext liefert den Inhalt der selben SPALTE von der nachfolgenden Zeile, das heist es geht die Spalte nach unten durch. Dies funktioniert auch wenn der Index nicht fortlaufend ist, z.b. 1 3 5 6 usw.
snmpgetnext -v2c -c localro localhost sysLocation.0

Abfrage mit Hilfe einer numerischen OID.
snmpwalk -v2c -c localro localhost .1.3.6.1.2.1.1.1


Die Ausgabe bei SNMP-Abfragen ist eventuell auf den ersten Blick etwas unverständlich. Der Grund ist, dass standardmäßig Tabellenelemente hier nicht zeilenweise nebeneinander entsprechend der Tabellenstruktur ausgegeben werden. Es wird stattdessen pro Zeile ein Element der Tabelle ausgegeben mit Angabe des Spaltennamens und der Zeilennummer (spaltennamen.zeilennummer). Man könnte auch sagen die Ausgabe ist spaltenweise, statt zeilenweise. Möchte man nun eine Zeile einer Tabelle betrachten so muss man sich einfach alle Zeilen der Ausgabe heraussuchen, die den selben Index haben. z.B. Spalte sysORID und sysORDescr von Tabellenzeile 3:
SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
...
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for managing TCP implementations

Man kann jedoch die Ausgabe auch zeilenweise erhalten.
snmptable -v2c -c localro -Os localhost sysORTable

Bei sehr breiten Tabellen ist folgendes Format hilfreich.
snmptable -v2c -c localro -Os -Cw 200 localhost sysORTable

Den Tabellenindex mit ausgeben.
snmptable -v2c -c localro -Os -Cw 200 -Ci localhost sysORTable


Eine ganze Tabelle ausgeben.
snmpwalk -v2c -c localro localhost system

Eine Spalte ausgeben.
snmpwalk -v2c -c localro localhost sysORID

Ein skalares Objekt ausgeben.
snmpwalk -v2c -c localro localhost sysDescr


Für effizientes Abfragen kann man z.B. die Kommandos snmpbulkget und snmpbulkwalk verwenden.
snmpbulkget -v2c -Cn1 -Cr5 -Os -c localro localhost system ifTable

snmpbulkwalk -v2c -Os -c localro localhost system

Die geladenen MIBs finden sich in den folgenden Verzeichnissen.
$HOME/.snmp/mibs
/usr/share/snmp/mibs/


Ausgabe der load average.
snmpwalk -v2c -c localro localhost laload
UCD-SNMP-MIB::laLoadFloat.1 = Opaque: Float: 0.000000
UCD-SNMP-MIB::laLoadFloat.2 = Opaque: Float: 0.010000
UCD-SNMP-MIB::laLoadFloat.3 = Opaque: Float: 0.000000

Ausgabe mit OIDs.
snmpwalk -v2c -On -c localro localhost udp