我正在尝试使用snmpwalk在某些界面上获取一些信息和统计信息。我用这个:

import netsnmp

serv = "172.16.1.1"
snmp_pass = "private"

oid = netsnmp.VarList('IF-MIB::ifName','IF-MIB::ifDescr')
snmp_res = netsnmp.snmpwalk(oid, Version=2, DestHost=serv, Community=snmp_pass)
for x in snmp_res:
    print "snmp_res:: ", x

我得到的答案是:
snmp_res:: lo
snmp_res:: EtherNet Adapter XYZ

答案是正确的,但我需要更多信息。当我使用snmpwalk从linux命令执行相同的操作时,我会获得更多信息,例如:
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: EtherNet Adapter XYZ

“EtherNet适配器XYZ”的ID为2,我需要该值以及接口(interface)上其他统计信息的引用。如何使用python和snmp来获得那个/它们?

最佳答案

直接从the documentation出来:



您已经传递了VarList,因此您已经拥有所需的内容。您只需要正确检查结果即可。

The tests有一个例子:

vars = netsnmp.VarList(netsnmp.Varbind('system'))

vals = sess.walk(vars)
print "v1 sess.walk result: ", vals, "\n"

for var in vars:
    print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'

关键是修改输入变量以提供所需的内容。返回值对您来说没有太大值(value)(笑)。

将所有这些放在一起看起来像您需要以下内容:
import netsnmp

serv = "172.16.1.1"
snmp_pass = "private"

oid = netsnmp.VarList('IF-MIB::ifName','IF-MIB::ifDescr')
snmp_res = netsnmp.snmpwalk(oid, Version=2, DestHost=serv, Community=snmp_pass)
for x in oid:
    print "snmp_res:: ", x.iid, " = ", x.val

(免责声明:无法测试;根据需要进行调整)

该文档中有关于VarBind和VarList的足够信息,可以找出摆脱x的最佳方法。

不过,x.iid是实例标识符,因此应该为您提供要使用的12。但是,也不要忘记检查x.tag,它可以是IF-MIB::ifNameIF-MIB::ifDescr(或类似的东西;您必须进行实验)。

关于python - Python Netsnmp和snmpwalk,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53614670/

10-11 08:09