# 通过SNMP收集主机CPU利用率: 通过SNMP协议,收集目标主机的CPU利用率(百分比),并返回JSON字符串. defGet_CPU_Info(addr): try: Head = ["HostName","CoreLoad","CpuUser","CpuSystem","CpuIdle"] CPU = [] ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.1.5") CPU.append(ret.read().split(":")[3].strip()) ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.25.3.3.1.2") CPU.append(ret.read().split(":")[3].strip())
for i in [9,10,11]: ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " 1.3.6.1.4.1.2021.11.{}.0".format(i)) ret = ret.read() Info = ret.split(":")[3].strip() CPU.append(Info) returndict(zip(Head,CPU)) except Exception: return0
defGet_CPU_Info(addr): try: Head = ["HostName","CoreLoad","CpuUser","CpuSystem","CpuIdle"] CPU = [] ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.1.5") CPU.append(ret.read().split(":")[3].strip()) ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.25.3.3.1.2") CPU.append(ret.read().split(":")[3].strip())
for i in [9,10,11]: ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " 1.3.6.1.4.1.2021.11.{}.0".format(i)) ret = ret.read() Info = ret.split(":")[3].strip() CPU.append(Info) returndict(zip(Head,CPU)) except Exception: return0
if __name__ == '__main__': for i inrange(100): dic = Get_CPU_Info("192.168.1.20") print(dic) time.sleep(1)
if errorIndication: print(errorIndication) else: if errorStatus: print('%s at %s' % (errorStatus.prettyPrint(), varBinds[int(errorIndex)-1] if errorIndex else'?')) else: for varBind in varBinds: print(' = '.join([x.prettyPrint() for x in varBind]))
首先我们以一个OID序号为例,我们查询特定序号对应的名称,然后将其记录下来,例如下面这样。
在客户机上面,需要在服务列,开启SNMP支持,并设置好一个团体名称,如下图。
然后我们简单的封装一个类,先来测试一下是否能通。
# snmpwalk -v 2c -c public 192.168.1.113 .1.3.6.1.2.1.1.5 from pysnmp.hlapi import *
classNetSNMP(): def__init__(self,address,region): self.region = region self.address = address