Python 使用 PYSNMP F5 ltm 的 SNMP
Python SNMP with PYSNMP F5 ltm
我是这方面的新手,
当我运行以下命令时:
snmpwalk -v2c -c public localhost .1.3.6.1.4.1.3375.2.2.5.6.2.1.6
在我的 F5 LTM 中,我得到了我所有的节点、池和状态,如下所示:
F5-BIGIP-LOCAL-MIB::ltmPoolMbrStatusEnabledState."/Common/pool-cnv-proc-financeiro-processamento-was-9169"."/Common/HAPP102".9169 = INTEGER: enabled(1)
但是当我通过 pysnmp 使用相同的 OID 时,我得到了这个:
[ObjectType(ObjectIdentity(<ObjectName value object at 0x6373150 tagSet <TagSet object at 0x4ab5190 tags 0:0:6> payload [1.3.6.1.4.1.3375...80.49.48.52.9144]>), <Integer value object at 0x6373050 subtypeSpec <ConstraintsIntersection object at 0x4ab5c90 consts <ValueRangeConstraint object at 0x4a17c90 consts -2147483648, 2147483647>> tagSet <TagSet object at 0x4aabad0 tags 0:0:2> payload [1]>)]
我的问题:
有没有办法解析这个 pysnmp 响应,还是我做错了什么?
这里是 python 代码:
from pysnmp.hlapi import *
def walk(host, oid):
for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False):
if errorIndication:
break
elif errorStatus:
break
else:
for varBind in varBinds:
print(varBind)
walk('10.10.100.89', '1.3.6.1.4.1.3375.2.2.5.6.2.1.6')
您只需要 .prettyPrint()
您在响应中获得的 pysnmp 对象:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
如图所示in the examples。
编辑:
如果您希望根据 MIB 解析响应变量绑定,您需要 load 该 MIB(可能 F5-BIGIP-LOCAL-MIB
)像这样进入 pysnmp:
...
ContextData(),
ObjectType(ObjectIdentity(oid)).loadMibs('F5-BIGIP-LOCAL-MIB'),
...
或者,如果您在请求中指定 MIB 符号(而不是指定 OID),pysnmp 将自动加载指定的 MIB。
...
ContextData(),
ObjectType(ObjectIdentity('F5-BIGIP-LOCAL-MIB', 'ltmPoolMbrStatusEnabledState')),
...
我是这方面的新手,
当我运行以下命令时:
snmpwalk -v2c -c public localhost .1.3.6.1.4.1.3375.2.2.5.6.2.1.6
在我的 F5 LTM 中,我得到了我所有的节点、池和状态,如下所示:
F5-BIGIP-LOCAL-MIB::ltmPoolMbrStatusEnabledState."/Common/pool-cnv-proc-financeiro-processamento-was-9169"."/Common/HAPP102".9169 = INTEGER: enabled(1)
但是当我通过 pysnmp 使用相同的 OID 时,我得到了这个:
[ObjectType(ObjectIdentity(<ObjectName value object at 0x6373150 tagSet <TagSet object at 0x4ab5190 tags 0:0:6> payload [1.3.6.1.4.1.3375...80.49.48.52.9144]>), <Integer value object at 0x6373050 subtypeSpec <ConstraintsIntersection object at 0x4ab5c90 consts <ValueRangeConstraint object at 0x4a17c90 consts -2147483648, 2147483647>> tagSet <TagSet object at 0x4aabad0 tags 0:0:2> payload [1]>)]
我的问题:
有没有办法解析这个 pysnmp 响应,还是我做错了什么?
这里是 python 代码:
from pysnmp.hlapi import *
def walk(host, oid):
for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False):
if errorIndication:
break
elif errorStatus:
break
else:
for varBind in varBinds:
print(varBind)
walk('10.10.100.89', '1.3.6.1.4.1.3375.2.2.5.6.2.1.6')
您只需要 .prettyPrint()
您在响应中获得的 pysnmp 对象:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
如图所示in the examples。
编辑:
如果您希望根据 MIB 解析响应变量绑定,您需要 load 该 MIB(可能 F5-BIGIP-LOCAL-MIB
)像这样进入 pysnmp:
...
ContextData(),
ObjectType(ObjectIdentity(oid)).loadMibs('F5-BIGIP-LOCAL-MIB'),
...
或者,如果您在请求中指定 MIB 符号(而不是指定 OID),pysnmp 将自动加载指定的 MIB。
...
ContextData(),
ObjectType(ObjectIdentity('F5-BIGIP-LOCAL-MIB', 'ltmPoolMbrStatusEnabledState')),
...