You are on page 1of 7

Introducción a las órdenes SNMP básicas

Enrique de la Hoz de la Hoz


3 de marzo de 2006

1. snmpget
La orden snmpget se puede utilizar para obtener datos de un host remoto
dado su nombre de host, la información y un OID. Como ejemplo veamos la
siguiente órden:
# snmpget -c public -v 2c localhost system.sysUpTime.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (326510) 0:54:25.10

En la orden anterior, localhost es el nombre del equipo con el que queremos


hablar, utilizando la comunidad SNMP public y solicitamos el valor del OID
system.sysUpTime.0.
Todas las utilidades que vamos a ver permiten utilizar abreviaturas de OID
y realizan búsquedas de la porción pasada como argumento en todo el arbol
por defecto para facilitar la tarea al usuario. De este modo podemos utilizar
simplemente una porción del OID si así lo deseáramos:
# snmpget -c public -v 2c localhost sysUpTime.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (326510) 0:54:25.10

Un error habitual cuando utilizamos esta orden es olvidar poner el índice en


los datos que estamos buscando. En las órdenes anteriores, la variable solicitada
es un escalar y el índice de los datos escalares es siempre un simple 0, de ahí el
'.0' en todos los OIDs anteriores. Si lo hubiéramos olvidado hubiéramos obtenido
un error que es diferente en función de si estamos utilizando una versión u otra
de SNMP:
# snmpget -c public -v 1 localhost system.sysUpTime
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: SNMPv2-MIB::sysUpTime
# snmpget -c public -v 2c localhost system.sysUpTime
SNMPv2-MIB::sysUpTime = No Such Instance currently exists at this OID

Se pueden realizar múltiples consultas en una única órden:


snmpget -c public -v 2c localhost system.sysUpTime.0 system.sysName.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (390447) 1:05:04.47
SNMPv2-MIB::sysName.0 = STRING: mago.aut.uah.es

1
2. snmptranslate
Esta órden es una herramienta muy poderosa que permite explorar el árbol
MIB de diversas formas desde la línea de órdenes.
Su forma más básica permite pasar de un OID a la variable que representa
(representación textual):
#snmptranslate .1.3.6.1.2.1.1.3.0
SNMPv2-MIB::sysUpTime.0

También permite pasar del nombre de la variable al OID que representa:


#snmptranslate -On SNMPv2-MIB::system.sysUpTime.0
.1.3.6.1.2.1.1.3.0

La variable que pasamos como argumento a snmptranslate se puede expre-


sar en cualquier formato numérico, texto o una mezcla de ambos. El ag -On
simplemente sirve para indicar que queremos la salida en formato de OID:
#snmptranslate .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
UCD-SNMP-MIB::prNames.0
#snmptranslate -On .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.1.3.6.1.4.1.2021.2.1.2.0

Hay ocasiones en que no recordamos el OID completo que estamos buscando.


En esos casos es útil la opción -IR permite realizar búsquedas del OID completo
si conocemos parte del mismo:
# snmptranslate sysUpTime.0
sysUpTime.0: Unknown Object Identifier (Sub-id not found: (top) ->sysUpTime)
# snmptranslate -IR sysUpTime.0
SNMPv2-MIB::sysUpTime.0

Puede que, incluso, ni siquiera conozcamos el nombre completo del OID sino
sólo una parte del mismo. En ese caso puede ser útil la opción -Ib (b del inglés
'best match ') que nos da el OID que se concuerde con el patrón que le indicamos.
Los patrones son similares a los que vimos en la introducción a Linux:
# snmptranslate -Ib 'sys.*ime'
SNMPv2-MIB::sysORUpTime

Para obtener una lista de todos los nodos que se ajustan a un patrón deter-
minado utilizamos el ag -TB:
#snmptranslate -TB 'vacm.*table'
SNMP-VIEW-BASED-ACM-MIB::vacmViewTreeFamilyTable
SNMP-VIEW-BASED-ACM-MIB::vacmAccessTable
SNMP-VIEW-BASED-ACM-MIB::vacmSecurityToGroupTable
SNMP-VIEW-BASED-ACM-MIB::vacmContextTable

Para obtener información sobre un determinado nodo del mib podemos uti-
lizar el ag -Td:
# snmptranslate -On -Td -Ib 'sys.*ime'

2
.1.3.6.1.2.1.1.9.1.4
sysORUpTime OBJECT-TYPE
-- FROM SNMPv2-MIB
-- TEXTUAL CONVENTION TimeStamp
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The value of sysUpTime at the time this conceptual
row was last instantiated."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysORTable(9)
sysOREntry(1) 4 }

Para nalizar con esta orden, podemos obtener una representación del árbol,
o de una porción del mismo utilizando el ag -Tp:
# snmptranslate -Tp -IR system
+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
+-- -RW- String sysContact(4)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysName(5)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysLocation(6)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- INTEGER sysServices(7)
| Range: 0..127
+-- -R-- TimeTicks sysORLastChange(8)
| Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER sysORIndex(1)
| Range: 1..2147483647
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp

3
3. snmgetnext
Esta órden es similar al comando snmpget se utiliza para obtenet el siguiente
oid en el árbol de datos del mib. En lugar de obtener los datos que se solicitan
directamente, devuelve el siguiente OID en el árbol y su valor:
SNMPv2-MIB::sysContact.0=STRING:Root<root@localhost>(configure /etc/snmp/snmp.local.conf)

Esta orden también se puede utilizar para recorrer de forma manual el árbol
de las mib en un host remoto, especicando siempre el último OID aparecido
en la línea de órdenes para la siguiente órden:
snmpgetnext -v 2c -c public localhost system.sysUpTime.0
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost>(configure /etc/snmp/snmp.local.conf)
[root@mago root]# snmpgetnext -v 2c -c public localhost system.sysContact.0
SNMPv2-MIB::sysName.0 = STRING: mago.aut.uah.es
[root@mago root]# snmpgetnext -v 2c -c public localhost system.sysName.0
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)

La órden snmpwalk que veremos a continuación hace exactamente esto pero


de una sola vez.
La órden snmgetnext devuelve el valor de un OID del que hayamos olvidado
el índice frente a snmpget que devolvía un error:
snmpget -v 2c -c public localhost system.sysUpTime.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (95862) 0:15:58.62
[root@mago root]# snmpgetnext -v 2c -c public localhost system.sysUpTime
SNMPv2-MIB::sysUpTime.0 = Timeticks: (96847) 0:16:08.47

4. snmpwalk
Esta órden realiza una serie completa de getnexts automáticamente y se de-
tiene cuando devuelve resultados que no están en el rango del OID especicado
originalmente. Por ejemplo, si quisiéramos obtener toda la información almace-
nada en el grupo system del MIB de una máquina podríamos hacerlo utilizando
esta órden:
# snmpwalk -v 2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux mago.aut.uah.es 2.6.0-test11 #27
Tue Dec 16 11:39:03 CET 2003 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
SNMPv2-MIB::sysUpTime.0 = Timeticks: (120246) 0:20:02.46
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost>(configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: mago.aut.uah.es
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORID.1 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.4 = OID: IP-MIB::ip

4
SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.6 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.7 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.8 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.9 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module to describe generic objects
for network interface sub-layers
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for managing IP and ICMP
implementations
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: View-based Access Control Model for
SNMP.
SNMPv2-MIB::sysORDescr.7 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.8 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.9 = STRING: The management information definitions
for the SNMP User-based Security Model.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (4) 0:00:00.04

5. snmptable
Esta orden muestra una tabla SNMP en un formato de las y columnas
de manera que su visionado y comprensión es más sencillo que si utilizamos la
órden snmpwalk:
# snmptranslate -Tp -IR sysORTable
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER sysORIndex(1)
| Range: 1..2147483647
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)

5
Textual Convention: TimeStamp

# snmptable -v 2c -Cw 80 -c public localhost sysORTable


SNMP table: SNMPv2-MIB::sysORTable
sysORID
IF-MIB::ifMIB
SNMPv2-MIB::snmpMIB
TCP-MIB::tcpMIB
IP-MIB::ip
UDP-MIB::udpMIB
SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMP-MPD-MIB::snmpMPDCompliance
SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMP table SNMPv2-MIB::sysORTable, part 2
sysORDescr
The MIB module to describe generic objects for network interface sub-layers
The MIB module for SNMPv2 entities
The MIB module for managing TCP implementations
The MIB module for managing IP and ICMP implementations
The MIB module for managing UDP implementations
View-based Access Control Model for SNMP.
The SNMP Management Architecture MIB.
The MIB for Message Processing and Dispatching.
The management information definitions for the SNMP User-based Security
Model.
SNMP table SNMPv2-MIB::sysORTable, part 3
sysORUpTime
0:0:00:00.00
0:0:00:00.00
0:0:00:00.00
0:0:00:00.00
0:0:00:00.00
0:0:00:00.00
0:0:00:00.04
0:0:00:00.04
0:0:00:00.04

6. snmpset
Esta orden se utiliza para modicar información en un host. Por cada una
de las variables que se quiere establecer, es necesario el OID a actualizar, el tipo
de datos de la variable y el valor al que queramos poner la variable. Podemos
obtener los tipos de datos válidos del siguiente modo:
#snmpset -h | tail -4
TYPE: one of i, u, t, a, o, s, x, d, b, n
i: INTEGER, u: unsigned INTEGER, t: TIMETICKS, a: IPADDRESS

6
o: OBJID, s: STRING, x: HEX STRING, d: DECIMAL STRING, b: BITS
U: unsigned int64, I: signed int64, F: float, D: double

Veamos como consultar, establecer y consultar el nuevo valor de una variable


utilizando snmpget y snmpset :
#snmpget -v 2c -c public localhost sysContact.0
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost>
#snmpset -v 2c -c public localhost sysContact.0 s Admin
SNMPv2-MIB::sysContact.0 = STRING: Admin
#snmpget -v 2c -c public localhost sysContact.0
SNMPv2-MIB::sysContact.0 = STRING: Admin

Si no se tiene derechos de escritura sobre un objeto obtendremos un error


que diferirá en función de si estamos utilizando la versión 1 o la versión 2 de
SNMP:
# snmpset -v 1 -c public localhost sysName.0 s "alguien"
Error in packet.
Reason: (noSuchName) There is no such variable name in this MIB.
# snmpset -v 2c -c public localhost sysName.0 s "alguien"
Error in packet.
Reason: notWritable (that object does not support modification)

You might also like