Monitoreo de dispositivos SNMP con PySNMP en Python

Monitoreo de dispositivos SNMP con PySNMP en Python

Introducción

SNMP (Simple Network Management Protocol) es un protocolo de gestión de red que permite a los administradores de red recopilar datos de dispositivos de red. PySNMP es una biblioteca Python que proporciona una interfaz para interactuar con el protocolo SNMP.

En este tutorial, veremos cómo usar PySNMP para monitorear dispositivos SNMP.

Requisitos

Para seguir este tutorial, necesitarás lo siguiente:

  • Una computadora con Python 3 instalado
  • Un dispositivo SNMP que admita el protocolo SNMP v1, v2c o v3

Instalando PySNMP

Para instalar PySNMP, ejecuta el siguiente comando en la terminal:

pip install pysnmp

Obteniendo los datos de un dispositivo SNMP

Para obtener los datos de un dispositivo SNMP, podemos usar la función get() de la biblioteca PySNMP. Esta función toma tres argumentos:

  • La dirección IP del dispositivo SNMP
  • El puerto SNMP (usualmente 161)
  • La OID (Object Identifier) del valor que queremos obtener

Por ejemplo, para obtener la carga de la CPU de un dispositivo SNMP, usaremos la siguiente función:

Python
from pysnmp.hlapi import *

def get_cpu_load(ip_address):
    community = "public"
    oid = "1.3.6.1.2.1.25.3.3.1.2"

    errorIndication, errorStatus, errorIndex, varBinds = \
        getCmd(SnmpEngine(), CommunityData(community), UdpTransportTarget(ip_address, 161), ObjectType(oid))

    if errorIndication:
        print(errorIndication)
        return

    if errorStatus:
        print("Error: %s at %s" % (errorStatus.prettyPrint(), errorIndex))
        return

    print(varBinds[0][1])

get_cpu_load("192.168.1.1")

Este código imprimirá la carga de la CPU del dispositivo SNMP en la dirección IP 192.168.1.1.

Obteniendo una lista de OIDs

Para obtener una lista de todos los OIDs disponibles en un dispositivo SNMP, podemos usar la función walk() de la biblioteca PySNMP. Esta función toma tres argumentos:

  • La dirección IP del dispositivo SNMP
  • El puerto SNMP (usualmente 161)
  • La raíz OID de la lista de OIDs que queremos obtener

Por ejemplo, para obtener una lista de todos los OIDs del dispositivo SNMP en la dirección IP 192.168.1.1, usaremos la siguiente función:

Python
from pysnmp.hlapi import *

def get_oids(ip_address):
    community = "public"
    oid = "1.3.6.1.2.1"

    errorIndication, errorStatus, errorIndex, varBinds = \
        getCmd(SnmpEngine(), CommunityData(community), UdpTransportTarget(ip_address, 161), ObjectType(oid), bulk=True)

    if errorIndication:
        print(errorIndication)
        return

    if errorStatus:
        print("Error: %s at %s" % (errorStatus.prettyPrint(), errorIndex))
        return

    for varBind in varBinds:
        print(varBind)

get_oids("192.168.1.1")

Este código imprimirá una lista de todos los OIDs del dispositivo SNMP en la dirección IP 192.168.1.1.

Conclusiones

En este tutorial, aprendimos cómo usar PySNMP para monitorear dispositivos SNMP. Podemos usar PySNMP para obtener datos de dispositivos SNMP, como la carga de la CPU, la temperatura y el estado de los enlaces.

Para obtener más información sobre PySNMP, consulta la documentación oficial: https://pysnmp.readthedocs.io/en/latest/