Python PySNMP:无法获取 OID
Python PySNMP: unable to fetch OID
我似乎无法使用 pysnmp 获取 SNMP。
python2 和 3.
结果相同
该设备使用 SNMP v2。
SNMPv2-SMI::enterprises.5597.30.0.2.2 = No Such Object currently exists
at this OID
SNMPv2-SMI::enterprises.5597.30.0.2.4 = No Such Object currently exists
at this OID
虽然 snmpwalk 工作正常:
snmpwalk -v1 -cpublic 10.0.1.8 1.3.6.1.4.1.5597.30.0.2.2
iso.3.6.1.4.1.5597.30.0.2.2.0 = INTEGER: 1
这是我的代码:
from pysnmp.entity.rfc3413.oneliner import cmdgen
import time
SNMP_HOST = '10.0.1.8'
SNMP_PORT = 161
SNMP_COMMUNITY = 'public'
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
cmdgen.CommunityData(SNMP_COMMUNITY),
cmdgen.UdpTransportTarget((SNMP_HOST, SNMP_PORT)),
'1.3.6.1.4.1.5597.30.0.2.2',
'1.3.6.1.4.1.5597.30.0.2.4'
)
# Check for errors and print out results
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:
print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
您正在执行 GET iso.3.6.1.4.1.5597.30.0.2.2
,而 snmpwalk 报告仅存在 OID iso.3.6.1.4.1.5597.30.0.2.2.0
。
试试这个代码(取自this example)。它使用更新和更简洁的 pysnmp API,但一旦您修复了查询的 OID,您的代码应该也能正常工作。
from pysnmp.hlapi import *
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('10.0.1.8', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.4.1.5597.30.0.2.2.0')))
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
我似乎无法使用 pysnmp 获取 SNMP。
python2 和 3.
结果相同
该设备使用 SNMP v2。
SNMPv2-SMI::enterprises.5597.30.0.2.2 = No Such Object currently exists
at this OID
SNMPv2-SMI::enterprises.5597.30.0.2.4 = No Such Object currently exists
at this OID
虽然 snmpwalk 工作正常:
snmpwalk -v1 -cpublic 10.0.1.8 1.3.6.1.4.1.5597.30.0.2.2
iso.3.6.1.4.1.5597.30.0.2.2.0 = INTEGER: 1
这是我的代码:
from pysnmp.entity.rfc3413.oneliner import cmdgen
import time
SNMP_HOST = '10.0.1.8'
SNMP_PORT = 161
SNMP_COMMUNITY = 'public'
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
cmdgen.CommunityData(SNMP_COMMUNITY),
cmdgen.UdpTransportTarget((SNMP_HOST, SNMP_PORT)),
'1.3.6.1.4.1.5597.30.0.2.2',
'1.3.6.1.4.1.5597.30.0.2.4'
)
# Check for errors and print out results
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:
print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
您正在执行 GET iso.3.6.1.4.1.5597.30.0.2.2
,而 snmpwalk 报告仅存在 OID iso.3.6.1.4.1.5597.30.0.2.2.0
。
试试这个代码(取自this example)。它使用更新和更简洁的 pysnmp API,但一旦您修复了查询的 OID,您的代码应该也能正常工作。
from pysnmp.hlapi import *
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('10.0.1.8', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.4.1.5597.30.0.2.2.0')))
)
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))