使用PySNMP进行snmpwalk

时间:2017-07-09 19:42:00

标签: python-3.x snmp pysnmp

我想重现以下SNMP命令的组合:

<html:submit styleClass="btn btn-link">submit</html:submit>

给了我这个输出:

snmpwalk -v2c -cpublic 192.168.0.10 1.3.6.1.2.1.25.2.3.1.3

所以我尝试了这段代码:

iso.3.6.1.2.1.25.2.3.1.3.1 = STRING: "Physical memory"
iso.3.6.1.2.1.25.2.3.1.3.3 = STRING: "Virtual memory"
iso.3.6.1.2.1.25.2.3.1.3.6 = STRING: "Memory buffers"
iso.3.6.1.2.1.25.2.3.1.3.7 = STRING: "Cached memory"
iso.3.6.1.2.1.25.2.3.1.3.8 = STRING: "Shared memory"
iso.3.6.1.2.1.25.2.3.1.3.10 = STRING: "Swap space"
iso.3.6.1.2.1.25.2.3.1.3.31 = STRING: "/"
iso.3.6.1.2.1.25.2.3.1.3.37 = STRING: "/run"
iso.3.6.1.2.1.25.2.3.1.3.39 = STRING: "/dev/shm"
iso.3.6.1.2.1.25.2.3.1.3.40 = STRING: "/run/lock"
iso.3.6.1.2.1.25.2.3.1.3.41 = STRING: "/sys/fs/cgroup"
iso.3.6.1.2.1.25.2.3.1.3.59 = STRING: "/tmp"
iso.3.6.1.2.1.25.2.3.1.3.60 = STRING: "/run/cgmanager/fs"
iso.3.6.1.2.1.25.2.3.1.3.61 = STRING: "/run/user/112"
iso.3.6.1.2.1.25.2.3.1.3.63 = STRING: "/run/user/0"

问题是它返回了许多不需要的OID ......

我尝试了不同的东西,比如使用#!/usr/bin/env python3 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))): 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: for varBind in varBinds: print(varBind) walk('192.168.0.10','1.3.6.1.2.1.25.2.3.1.3') 功能,但我无法让它以我想要的方式工作。

我可以从Python代码中调用外部getCmd()命令,但我更愿意使用Python模块找到解决方案。

有什么想法可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

尝试将lexicographicMode关键字参数传递给nextCmd()。例如:

for (errorIndication,
     errorStatus,
     errorIndex,
     varBinds) in nextCmd(SnmpEngine(), 
                          CommunityData('public'),
                          UdpTransportTarget((host, 161)),
                          ContextData(),                                                           
                          ObjectType(ObjectIdentity(oid)),
                          lexicographicMode=False):
    ...

这应该具有通过您提供的初始OID来限制SNMP walk的效果(假设您提到的不需要的OID是那些超出前缀的那些)。