我正在尝试使用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
是实例标识符,因此应该为您提供要使用的1
和2
。但是,也不要忘记检查x.tag
,它可以是IF-MIB::ifName
或IF-MIB::ifDescr
(或类似的东西;您必须进行实验)。关于python - Python Netsnmp和snmpwalk,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53614670/