交换机设置SNMP协议,例为V2C版本,获取接口速度。
def getData():
shost = "192.168.0.2"
sDevport = "20"
sin1 = os.popen('snmpwalk -v 2c -c pass ' + \
shost + ' IF-MIB::ifHCInOctets.'+ \
sDevport).read()[:-1].split()[-1]
sout1 = os.popen('snmpwalk -v 2c -c pass ' + \
shost + ' IF-MIB::ifHCOutOctets.'+ \
sDevport).read()[:-1].split()[-1]
time.sleep(5)
sin2 = os.popen('snmpwalk -v 2c -c pass ' + \
shost + ' IF-MIB::ifHCInOctets.'+ \
sDevport).read()[:-1].split()[-1]
sout2 = os.popen('snmpwalk -v 2c -c pass ' + \
shost + ' IF-MIB::ifHCOutOctets.'+ \
sDevport).read()[:-1].split()[-1]
inT = round((float(sin2) - float(sin1))*8/1024/1024/5, 2)
outT = round((float(sout2) - float(sout1))*8/1024/1024/5, 2)
return inT, outT
踩坑列表
1)sDevport 端口不是设备的物理端口。如交换机25口,用命令snmpwalk -v 2c -c pass 192.168.1.2 |grep 25,查找 IF-MIB::ifDescr.XX。XX为扩展的口。
2)不要是用IF-MIB::ifInOctets.XX,用IF-MIB::ifHCInOctets.XX。前者为32位,后者为64位记录。前者容易满计算麻烦。
3)交换机返回的为累加统计,所以需要中间等待后,再次获取,计算两次的差。
4)返回的值为byte,需要先乘8,计算为bit然后再除1024,计算进位量。