Python pysnmp-从NET-SNMP-EXTEND-MIB EXTEND脚本获取输出?
如何使用pysnmp 4.3通过MIB正确调用SNMP扩展脚本 我在远程服务器的snmpd.conf文件中有以下条目:Python pysnmp-从NET-SNMP-EXTEND-MIB EXTEND脚本获取输出?,python,snmp,mib,pysnmp,Python,Snmp,Mib,Pysnmp,如何使用pysnmp 4.3通过MIB正确调用SNMP扩展脚本 我在远程服务器的snmpd.conf文件中有以下条目: extend check_fd_wap /app/users/nagios_checks/check_fd_wap.sh 反过来,可以通过以下方式调用: snmpwalk -t 60 -v2c -c greendale remoteserver 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check_fd_wap"' NET-SNMP
extend check_fd_wap /app/users/nagios_checks/check_fd_wap.sh
反过来,可以通过以下方式调用:
snmpwalk -t 60 -v2c -c greendale remoteserver 'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check_fd_wap"'
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check_fd_wap" = STRING: { "sys_inuse" : 32640, "proc_data" : { "ssl-mmsib" : { "proc_used" : 22, "proc_limit" : 200000 } , (...) }
在pysnmp中,我试图调用MIBNET-SNMP-EXTEND-MIB::nsExtendOutput1Line。“使用示例代码检查\u fd\u wap”
:
errorIndication, errorStatus, errorIndex, varBinds = next(
getCmd(SnmpEngine(),
CommunityData(community, mpModel=1),
UdpTransportTarget((hostname, port)),
ContextData(),
ObjectType(ObjectIdentity('NET-SNMP-EXTEND-MIB','nsExtendOutput1Line','check_fd_wap')))
)
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
但是,此操作失败,并显示“DisplayString”未能转换值OctetString的错误消息:
raise SmiError('MIB object %r having type %r failed to cast value %r: %s' % (self.__args[0].prettyPrint(), self.__args[0].getMibNode().getSyntax().__class__.__name__, self.__args[1], sys.exc_info()[1]))
;SmiError: MIB object u'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.check_fd_wap' having type 'DisplayString' failed to cast value OctetString('{ "sys_inuse" (...)"" at DisplayString
但是,用翻译后的OID来调用它也很好('.1.3.6.1.4.1.8072.1.3.2.3.1.1.12.99.104.101.99.107.95.102.100.95.119.97.112'
)
此错误的原因是什么?
另外,如果我使用完整的MIB NET-SNMP-EXTEND-MIB::nsExtendOutput1Line调用getCmd。将\u fd\u wap
作为一个参数选中,我会得到错误:
pysnmp.smi.error.NoSuchObjectError: NoSuchObjectError({'str': 'Can\'t resolve node name ::(\'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line\', \'"check_fd_wap"\') at <pysnmp.smi.view.MibViewController instance at 0x2989638>'})
pysnmp.smi.error.NoSuchObjectError:NoSuchObjectError({'str':'无法解析节点名::(\'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line\',''检查fd\u wap''),位于'})
是否可以在一个字符串中调用包含完整MIB的SNMP get?此故障:
'DisplayString' failed to cast value OctetString
当pysnmp从SNMP代理接收到请求OID的响应时发生
1.3.6.1.4.1.8072.1.3.2.3.1.1.12.99.104.101.99.107.95.102.100.95.119.97.112
(对应于NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.check_fd_wap MIB object),然后它尝试将响应值({“sys_inuse”:32640,“proc…)转换为人性化的显示字符串表示形式。此时pysnmp失败,但由于某些原因,确切原因未包含在报告中
我猜SNMP代理发送的响应字符串可能会意外超过255个字符的长度(这是一个错误)
正式正确的解决方案是使SNMP代理响应适合255个ASCII字符的MIB对象,以满足DisplayString类型限制
或者,您可以通过将lookupMib=False关键字参数传递给getCmd()函数来禁用pysnmp中响应值的MIB查找。此故障:
'DisplayString' failed to cast value OctetString
当pysnmp从SNMP代理接收到请求OID的响应时发生
1.3.6.1.4.1.8072.1.3.2.3.1.1.12.99.104.101.99.107.95.102.100.95.119.97.112
(对应于NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.check_fd_wap MIB object),然后它尝试将响应值({“sys_inuse”:32640,“proc…)转换为人性化的显示字符串表示形式。此时pysnmp失败,但由于某些原因,确切原因未包含在报告中
我猜SNMP代理发送的响应字符串可能会意外超过255个字符的长度(这是一个错误)
正式正确的解决方案是使SNMP代理响应适合255个ASCII字符的MIB对象,以满足DisplayString类型限制
或者,您可以通过将lookupMib=False关键字参数传递给getCmd()函数来禁用pysnmp中响应值的MIB查找。是否按照此答案中所述加载自定义MIB文件?否,因为我使用的不是自定义MIB,而是“NET-SNMP-EXTEND-MIB”。MIB到OID的转换工作正常,失败的是SNMP响应的处理。我认为消息
无法解析节点名称::(\'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line\',\''check\u fd\u wap'')at'})
显然指出,从MIB到OID的转换存在问题,而且事实上所有的转换都可以使用数字OID。这可能只意味着ObjectIdentity
构造函数没有被正确调用,因为ObjectType(ObjectIdentity('NET-SNMP-EXTEND-MIB'、'nsExtendOutput1Line'、'check\u fd\u wap')))
正确地转换为OID。但这只是第二个问题,对于这个问题,我会满意地回答“不,你不能那样叫它”。你是否按照此回答中所述加载了自定义MIB文件?不,因为我没有使用自定义MIB,而是“NET-SNMP-EXTEND-MIB”。MIB到OID的转换工作正常,失败的是SNMP响应的处理。我认为消息无法解析节点名称::(\'NET-SNMP-EXTEND-MIB::nsExtendOutput1Line\',\''check\u fd\u wap'')at'})
显然指出,从MIB到OID的转换存在问题,而且事实上所有的转换都可以使用数字OID。这可能只意味着ObjectIdentity
构造函数没有被正确调用,因为ObjectType(ObjectIdentity('NET-SNMP-EXTEND-MIB'、'nsExtendOutput1Line'、'check\u fd\u wap')))
正确地转换为OID。但这只是第二个问题,对于这个问题,我会满意地回答“不,你不能这样称呼它”。