
Es un protocolo utilizado para el manejo de dispositivos en redes IP y es una excelente opción para la administración de nuestra red. Una de sus grandes ventajas es que es un protocolo soportado por una gran cantidad de dispositivos (switches, routers, impresoras, sistemas Windows, sistemas UNIX, etc.) a diferencia de su predecesor, el Simple Gateway Management Protocol (SGMP), el cual sólo estaba pensado para administrar routers.
Podemos utilizar para cosas tan simples como monitorear la condición de nuestros dispositivos hasta poder tener control sobre ellos (por ejemplo, podemos dar de baja interfaces o condiciones más especificas designadas por los fabricantes del hardware).
¿Cómo funciona SNMP?
En el mundo de SNMP hay dos actores: managers y agents.
Se tiene como manager a un servidor que corra un software que pueda administrar tareas para la red, a menudo se les conoce como NMSs (Network Management Stations).
Los agents, son piezas de software que corren en los dispositivos de red que administramos, puede ser un programa separado o puede estar incorporado en el sistema operativo. La mayoría de los dispositivos IP vienen con una especie de SNMP agent.
En SNMP, tenemos que lo importante es la interacción entre estos dos actores, el agent le pasa información al manager, y éste se encarga de administrarla. De hecho el manager puede tener un rol más activo solicitando y actualizando la información del agent.

Cabe mencionar que el agent tiene una lista de objetos que lo describen (por decir, un objeto podría ser el status operacional de la interfaz de un router) y aquí es donde entran las MIBs.
Una MIB (Management Information Base ) es una base de datos que contiene información de los objetos del agente, el cual puede implementar varias MIBs, sin embargo todos los agents implementan una en particular, la cual es MIB-II y cuyo RFC es el 1213.
SNMP usa UDP (User Datagram Protocol) como su protocolo de transporte para pasar los datos entre managers y agents. La ventaja de que trabaje con UDP en vez de TCP es por la velocidad, debido a que no hay una conexión end-to-end, sin embargo por obvias razones este envío de información no es confiable (pérdida de paquetes, sin embargo no es un problema realmente), depende entonces de la aplicación SNMP el determinar si se perdieron los datagramas y retransmitirlos en todo caso (esto se logra utilizando timeouts).
SNMP usa el puerto UDP 161 para mandar y recibir requests y el puerto 162 para recibir los traps de los dispositivos administrados.
Un punto importante a tratar al hablar de SNMP es lo que se conoce como comunidades (communities) las cuales son la manera en la cual se establecen relaciones seguras (trust) entre managers y agents. A modo de resumen, una comunidad es una contraseña.
Un agent tiene tres nombres de comunidades: read-only, read-write y trap. Cada una controla una diferente actividad y va en relación a su nombre (solo lectura, lectura y escritura y recepción de notificaciones asíncronas respectivamente). Por default, tenemos que public representa a read-only y private a read-write.
Si bien tenemos que en SNMP podemos obtener información operacional sobre los dispositivos queda una pregunta, ¿cómo es representada la información en SNMP?
Cada objeto tiene tres atributos:
Nombre: El nombre o mejor dicho, el identificador del objeto (OID) el cual es único y define a cada objeto. Puede estar representado en forma numérica o en versión “human readable”.
Tipo y sintaxis: El como los datos van a ser representados y transmitidos entre managers y agents (el tipo de dato del objeto), una ventaja es que es independiente de la máquina que sea, por ejemplo, una máquina con Windows 2000 puede comunicarse con una Sun SPARC.
Encoding: Es el como los objetos son encoded y decoded.
Los objetos son organizados en un árbol jerárquico, y de hecho esta estructura es la base para el esquema de nombres en SNMP. Un OID está hecho con una serie de números enteros basados en los nodos del árbol y separados por puntos.
Como en cualquier árbol el primer nodo es la raíz y cualquier nodo con hijos es un subárbol. Cualquier nodo sin hijos a su vez es llamado nodo hoja. Cabe mencionar que solo el subárbol iso(1) del diagrama pertenece a SNMP. La representación numérica, por ejemplo, del subárbol internet(1) sería la siguiente: 1.3.6.1 y en versión “human readable”: iso.org.dod.internet . Como se puede ver cada objeto tiene un número correspondiente (OID) así como un nombre.
Información para el subárbol internet(1):
Respecto al nodo hoja directory(1), actualmente no es utilizado.
El management(2) define un estándar de administración.
Experimental(3) está reservado para pruebas e investigación.
Y en prívate(4) está reservado para que sean definidos nuevos objetos por individuos u organizaciones (para una lista de los números que se han creado de forma privada visitar: http://www.iana.org/assignments/enterprise-numbers , se anexa un documento de todas formas con ésta información).
Ahora veamos el grupo de MIB-II (definido como iso.org.dod.internet.mgmt.1 o lo que es lo mismo 1.3.6.1.2.1) representado en árbol y una lista rápida descriptiva de los objetos que lo integran (analizar el RFC 1213 respectivo a MIB-II para más información):
¿Cómo administrar hosts?
Partiendo del hecho de que con SNMP podemos recabar información de las máquinas en nuestra red, podemos usar una rama llamada host que pertenece a MIB-II, con la cual podemos sacar información específica:
host OBJECT IDENTIFIER ::= { mib-2 25 }
hrSystem OBJECT IDENTIFIER ::= { host 1 }
hrStorage OBJECT IDENTIFIER ::= { host 2 }
hrDevice OBJECT IDENTIFIER ::= { host 3 }
hrSWRun OBJECT IDENTIFIER ::= { host 4 }
hrSWRunPerf OBJECT IDENTIFIER ::= { host 5 }
hrSWInstalled OBJECT IDENTIFIER ::= { host 6 }
El OID de host es 1.3.6.1.2.1.25 (iso.org.dod.internet.mgmt.mib-2.host).
The hrSystem (1.3.6.1.2.1.25.1) información del sistema en si.
The hrDevice (1.3.6.1.2.1.25.3) and hrStorage (1.3.6.1.2.1.25.2) información de los dispositivos del host y de sus medios de almacenamiento respectivamente.
The hrSWRun (1.3.6.1.2.1.25.4), hrSWRunPerf (1.3.6.1.2.1.25.5), and hrSWInstalled (1.3.6.1.2.1.25.6 ) se refieren aspectos respectivos al software instalado en el sistema y a los procesos, etc.
En el siguiente diagrama presentamos el árbol para la rama de host en MIB-II, la razón, con la información extraida del árbol podemos obtener datos para administrar nustros hosts:

Ok… ahora como comentario final, diré que podemos hacer nuestrar propias herramientas de administración con PHP (bueno, con otros lenguajes es posible también, pero yo me anime a hacerlo en PHP para tener una herramienta web fácil de desarrollar y administrar sin tantos líos), de hecho desarrolle un sistema para este fin, al cual le llamé junto con un amigo Free-Love Scanner y puedes encontrar más información de él (incluido más documentación y código fuente) en el siguiente link: http://www.apuntux.com/category/proyectos/free-love-scanner/
Bibliografía:
SNMP – http://es.wikipedia.org/wiki/SNMP
SNMP Tutorial-http://www.dpstele.com/layers/l2/snmp_l2_tut_part1.php
Essential SNMP, Second Edition, by Douglas R. Mauro and Kevin J. Schmidt. Copyright 2005 O’Reilly Media, Inc., 0-596-00840-6






