如何使用 pysnmp 走 sub table
How to walk sub table with pysnmp
我想在enterprises.35604.2.3.5.7.2 oid下走snmp table。这将 return 一个日志列表。
当我执行代码时,它不会在最后一个 table 元素后停止。
我怎样才能确保它会在所有子 table 完成后停止?
from pysnmp.hlapi import *
logoid='1.3.6.1.2.1.69.1.5.8.1.7'
def scan_cm_log(ipaddress, oid):
for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
CommunityData('<key>'),
UdpTransportTarget((ipaddress, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
):
if not errorIndication and not errorStatus:
for varBind in varBinds:
result=' = '.join([x.prettyPrint() for x in varBind])
print(result)
scan_cm_log('<ip>', logoid)
检查 varBind
看看你在做什么,如果你离开了 table,请做一个 return
。
当您收到原始 OID 不是前缀的 OID 的响应时,通过结束步行来完成此操作。
所以,如果你走 1.2.3.4,你得到 1.2.3.4.1/1.2.3.4.2/1.2.3.4.3/1.2.3.5.1/1.2.3.5.2, “1.2.3.5.1”不是以“1.2.3.4”开头,所以到此为止。
最终完全取决于您想要做什么以及使用什么logic/algorithm。但是上面是一个"typical"的走算法。
按照 here 的说明尝试添加 lexicographicMode=False
标志。
iterator = nextCmd(
SnmpEngine(),
CommunityData('<key>'),
UdpTransportTarget((ipaddress, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False)
for (errorIndication, errorStatus, errorIndex, varBinds) in iterator:
...
一旦您查询的所有 OID 都离开了它们各自的初始 OID 前缀,这应该会耗尽迭代器。
我想在enterprises.35604.2.3.5.7.2 oid下走snmp table。这将 return 一个日志列表。
当我执行代码时,它不会在最后一个 table 元素后停止。 我怎样才能确保它会在所有子 table 完成后停止?
from pysnmp.hlapi import *
logoid='1.3.6.1.2.1.69.1.5.8.1.7'
def scan_cm_log(ipaddress, oid):
for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
CommunityData('<key>'),
UdpTransportTarget((ipaddress, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
):
if not errorIndication and not errorStatus:
for varBind in varBinds:
result=' = '.join([x.prettyPrint() for x in varBind])
print(result)
scan_cm_log('<ip>', logoid)
检查 varBind
看看你在做什么,如果你离开了 table,请做一个 return
。
当您收到原始 OID 不是前缀的 OID 的响应时,通过结束步行来完成此操作。
所以,如果你走 1.2.3.4,你得到 1.2.3.4.1/1.2.3.4.2/1.2.3.4.3/1.2.3.5.1/1.2.3.5.2, “1.2.3.5.1”不是以“1.2.3.4”开头,所以到此为止。
最终完全取决于您想要做什么以及使用什么logic/algorithm。但是上面是一个"typical"的走算法。
按照 here 的说明尝试添加 lexicographicMode=False
标志。
iterator = nextCmd(
SnmpEngine(),
CommunityData('<key>'),
UdpTransportTarget((ipaddress, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False)
for (errorIndication, errorStatus, errorIndex, varBinds) in iterator:
...
一旦您查询的所有 OID 都离开了它们各自的初始 OID 前缀,这应该会耗尽迭代器。