Sie sind auf Seite 1von 6

Introducción a snmp4j

Mayo 21, 2010 por Johan Rask en Java, Consejos y trucos | 95 Comentarios
Johan Rask
Actualización 2010-09-22: Obtención asíncrona que se prueba con Awaitility.
https://blog.jayway.com/2010/05/21/introduction-to-snmp4j/
Traducción Andrés E. Castillo -23-nov-2019
SNMP es una tecnología ampliamente aceptada y se utiliza para monitorizar
una amplia variedad de dispositivos, pero como resulta que muy pocas personas (al
menos entre los programadores java) parecen saber algo sobre cómo construir
soluciones basadas en snmp.
Este post no discutirá nada en absoluto sobre la teoría de SNMP, sino que me
centraré en cómo construir una solución simple usando snmp4j. Así que, si tu jefe te
acaba de decir que implementes cualquier tipo de tecnología snmp en un producto
java y no tienes ni idea de por dónde empezar, este post es para ti.
Desafortunadamente, es imposible cubrir todos los aspectos de snmp4j (y
honestamente tengo mucho que aprender), pero con suerte esto te pondrá en
marcha rápidamente.
Crearemos un cliente simple y un agente simple (con soporte para snmp
versión 2c) que utilizaremos en una prueba automatizada.

Curso intensivo SNMP


SNMP fue creado para ser muy simple, pero en realidad es bastante difícil de
entender a primera vista, pero hay otras grandes fuentes que cubren esto. Sin
embargo, mientras escribía me di cuenta de que hay algunas cosas que debes saber
antes de que puedas entender este post.
MIB (Management Information Base), si no tienes idea de qué es esto,
sería una buena idea leerlo brevemente en wikipedia. Para
hacerlo más fácil, piense en un MIB como un árbol.
OID (Object identifier), representa la clave de un nodo de árbol y se
utiliza para GET/SET valores en ese nodo. Un ejemplo es
.1.3.6.6.1.2.2.1.1.1.
Objeto escalar, un nodo con un único valor de objeto.

Tabla MIB, Permite agrupar valores en un nodo y puede contener múltiples


filas.
Otros recursos
Wikipedia | snmplink.org | Guía para principiantes (breve)

Cómo empezar
Este proyecto de ejemplo está construido usando maven 2.2.1 y java6.
También podría ser bueno descargar las fuentes de snmp4j de
http://www.snmp4j.org.
Snmp4j es la tecnología líder de código abierto para soluciones java basadas
en snmp y tiene una API tanto para clientes snmp (o administradores) como para
agentes y está licenciada bajo Apache 2.

Descargar ejemplos de fuentes


Todo el código de ejemplo publicado está en github
https://github.com/jrask/snmp-blog.

Construyendo tu primer cliente snmp


Un cliente (o snmp manager) es una aplicación que consulta a un agente para
obtener información. También puede recibir trampas de los agentes, pero esto no se
discutirá aquí. Construir un cliente es muy fácil y esto está bien descrito en el javadoc
para la clase org.snmp4j.Snmp.
Abajo hay algunos fragmentos de código de mi clase SimpleSnmpClient que
se incluye en el proyecto.
1) Inicie la sesión de Snmp. Si olvida el método listen() no obtendrá ninguna
respuesta porque bajo el capó, la comunicación es asincrónica y el método
listen() escucha las respuestas.

TransportMapping transport = new DefaultUDPTransportMapping();


snmp = new SNMP(transport);
transport.listen();
2. Hacerlo tan simple como sea posible en mi cliente tengo un método simple que
toma un solo OID y devuelve la respuesta del agente como una cadena.

3. Este método es más genérico y es capaz de manejar múltiples OIDs. En una


aplicación real con muchos agentes probablemente implementaría esto
asincrónicamente con un Escuchador de respuesta para evitar que su
threadpool(grupos de hilos) se agote.

4. Este método devuelve un objetivo, que contiene información sobre dónde se


deben obtener los datos y cómo.
Invocación del cliente
Usando el código de abajo y apuntando a uno de tus routers (si snmp está
habilitado) obtendrás información básica sobre qué tipo de router es.

Eso fue muy fácil, y es básicamente el mismo código que puedes encontrar en
la clase org.snmp4j.Snmp, así que no estamos proporcionado algo nuevo. Vale, ¿y
qué si queremos probar a este cliente sin acceder al router físico? Eso es lo siguiente.
Creación de un agente snmp súper simple
Si crear un cliente snmp es fácil, crear un agente snmp (y saber lo que estás
haciendo) es mucho más difícil. Para ayudarle a empezar, snmp4j proporciona dos
clases; BaseAgent que puede ser subclasificado para construir su agente persona-
lizado, y TestAgent que es una clase ejecutable que extiende BaseAgent. El problema
una vez que empiezas a ver estas clases es que es muy difícil entender lo que hacen
a menos que seas un experto en snmp, así que en su lugar he creado una
implementación de agente que sólo contiene la funcionalidad mínima para soportar
snmp v2c. Básicamente lo que he hecho es arrancar las partes de TestAgent que
realmente no necesitaba para esta demo.
Probando el cliente contra el agente
A continuación, engancharemos al agente y al cliente en una prueba JUnit
para verificar que funciona como se espera.

Adición de tablas MIB a su agente


Probablemente no te escaparás de crear una tabla, así que lo último que te
mostraré es cómo la creamos y probamos. Para mostrar cómo se hace esto, primero
crearé una tabla en el agente y luego escribiré una prueba que extraerá los datos de
la tabla y verificará el contenido.
Para crear la tabla he creado una clase de utilidad que se puede encontrar en
el proyecto descargable.

Para probar que recibimos los datos de la tabla esperada he creado un


método getTableAsString() en la clase SimpleSnmpClient. Este método utiliza el
método org.snmp4j.util.tableUtils getTable().

Por favor, eche un vistazo a https://github.com/jrask/snmp-blog si hay algo que


no está claro. El javadoc en http://www.snmp4j.org/ también es muy útil.
Buena suerte!

Das könnte Ihnen auch gefallen