从NETSNMPEXTENDMIB extend脚本获取输出?

2024-05-20 18:46:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用pysnmp4.3通过MIB正确调用SNMP扩展脚本?在

我在远程服务器的snmpd.conf公司文件:

extend check_fd_wap /app/users/nagios_checks/check_fd_wap.sh

可通过以下方式调用:

^{pr2}$

在pysnmp中,我尝试使用示例代码调用MIBNET-SNMP-EXTEND-MIB::nsExtendOutput1Line."check_fd_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' failed to cast value 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')。在

SNMPv2-SMI::enterprises.8072.1.3.2.3.1.1.12.99.104.101.99.107.95.102.100.95.119.97.112 = { "sys_inuse" : 31110, "proc_data" : {  "ssl-mmsib" : { "proc_used" : 19, "proc_limit" : 200000 } } }

这个错误的原因是什么?

另外,如果我使用完整的MIB NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.check_fd_wap作为一个参数调用getCmd,则会得到错误:

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>'})

是否可以在一个字符串中使用完整的MIB调用SNMP get?


Tags: tonetvaluecheck错误snmpmibfailed
1条回答
网友
1楼 · 发布于 2024-05-20 18:46:52

这次失败:

'DisplayString' failed to cast value OctetString

当pysnmp从SNMP代理收到请求的OID的响应时发生

^{pr2}$

(对应于NET-SNMP-EXTEND-MIB::nsExtendOutput1线路检查然后它试图转换响应值({“sys_nuse”:32640,“proc…”。。。)转换为人性友好的显示字符串表示。此时pysnmp失败,但由于某种原因,报告中没有包含确切的原因。在

我猜您的SNMP代理发送的响应字符串可能会意外地超过255个字符的长度(这是一个constraint of DisplayString type)。在

形式上正确的解决方案是使该MIB对象的SNMP代理响应适合255个ASCII字符,以满足DisplayString类型限制。在

或者,您可以通过将lookupMib=False关键字参数传递到getCmd()函数来禁用pysnmp中响应值的MIB查找。在

相关问题 更多 >