据说,如果论性能,netsnmp更强,而且netsnmp天生支持walk, 但是在安装方式上, pysnmp简单直接,netsnmp需要先安装netsnmp,然后安装相应的python模块,比较麻烦。
参考 http://www.huilog.com/?p=629, 基本上分为下载, python setup.py build, python setup.py install 两步
而且pysnmp也可以自己写代码实现walk
def walk(host, oid, community):
for (errorIndication,errorStatus,errorIndex,varBinds) in nextCmd(SnmpEngine(),
CommunityData(community),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False # 限制其只在指定范围内walk
):
if errorIndication:
# print(errorIndication, file=sys.stderr)
break
elif errorStatus:
# print('%s at %s' % (errorStatus.prettyPrint(),
# errorIndex and varBinds[int(errorIndex) - 1][0] or '?'),
# file=sys.stderr)
break
else:
# return varBinds
for varBind in varBinds:
yield varBind
# print(varBind)
def get(host, oid, snmpCommunity): errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData(snmpCommunity), UdpTransportTarget((host, 161)), ContextData(), ObjectType(ObjectIdentity(oid)) ) ) 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: yield varBind