¿Existe alguna manera de obtener información con SNMP sin utilizar OIDs?
Estoy empezando a lidiar con SNMP. Quiero obtener información de los dispositivos en mi red como la dirección IP, dirección MAC, nombre, etc. Quiero hacer un descubrimiento de red.
Tengo el código a continuación. No quiero usar números de OID para esa información. ¿Hay alguna forma de obtener la información sin OIDs?
Además, la salida de mi código está mal. Los caracteres no se muestran correctamente.
from pysnmp.hlapi import *
import datetime
class SNMP_QUERY():
def __init__(self):
pass
def __del__(self):
pass
def snmp_query(host, community, oid):
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData(community),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lookupMib=False))
if errorIndication:
print(errorIndication)
else:
if errorStatus:
print('%s at %s' % (
errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1] or '?'
)
)
else:
for name, val in varBinds:
return (str(val))
def main():
# Dispositivo de red
host = '127.0.0.1'
community = 'public'
#overviewModelName = '.1.3.6.1.2.1.1.1.0'
name = '1.3.6.1.2.1.1.5.0'
macAddres = '.1.3.6.1.2.1.2.2.1.6.12'
io_address = '.1.3.6.1.2.1.4.21.1.1.192.168.1.27'
result = {}
# result['Model Name'] = snmp_query(host, community, overviewModelName)
result['Name'] = snmp_query(host, community, name)
result['Mac Address'] = snmp_query(host, community, macAddres)
result['IP'] = snmp_query(host, community, io_address)
print(result)
if __name__ == '__main__':
main()
Salida:
{'Name': 'DESKTOP-ANIHIT4', 'Mac Address': 'ÜA©Hð&', 'IP': 'ÀØ\x01\x1b'}
davy.ai
Para obtener información de dispositivos en la red como la dirección IP, dirección MAC, nombre y mucho más, sin utilizar números OID, podemos utilizar las especificaciones MIB SNMP del vendedor/objetos MIB neutrales del vendedor. Estas especificaciones se presentan en forma de archivos MIB que asocian cadenas con números OID para cada objeto MIB. Podemos utilizar un software de exploración MIB o bases de datos en línea, como oid-info.com, para buscar estas especificaciones y los números de OID asociados.
En el código compartido anteriormente, podemos modificar la función
snmp_query()
para aceptar un nombre de objeto MIB específico como cadena, en lugar del número OID. Luego, podemos utilizar la funcióngetCmd()
para recuperar el valor del objeto MIB, utilizando la funciónObjectType()
que recibe laObjectIdentity()
del objeto MIB.Por ejemplo, para obtener el nombre del dispositivo, podemos modificar el código de la siguiente manera:
Observa que utilizamos
lookupMib=True
para cargar automáticamente los MIB específicos del vendedor y resolver los valores de cadena a sus números OID.En cuanto a la salida incorrecta, parece que los valores devueltos tienen algunos caracteres no imprimibles. Podemos utilizar la función
repr()
para imprimir el valor exacto de la cadena, incluyendo los no imprimibles. Esto puede ayudar a identificar el problema con la salida.¡Espero que esto te sea de ayuda!