Python使用pysnmp获取交换机
前言
什么是SNMP
SNMP是广泛应用于TCP/IP网络的网络管理标准协议,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。SNMP采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且SNMP以用户数据报协议(UDP)报文为承载,因而受到绝大多数设备的支持,同时保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查。
SNMP的基本组件
SNMP基本组件包括网络管理系统NMS(Network Management System)、代理进程(Agent)、被管对象(Managed Object)和管理信息库MIB(Management Information Base)。如图所示他们共同构成SNMP的管理模型,在SNMP的体系结构中都起着至关重要的作用。
使用pysnmp模块获取目标数据
注:网上的转载都是坑,没一个能用
from pysnmp.hlapi import *
class NetSNMP():
def __init__(self,address,region):
self.region = region
self.address = address
# 获取指定数据的方法
def GetNumber(self,oid,sub_oid,sub_id):
iterator = getCmd(SnmpEngine(),
CommunityData(self.region),
UdpTransportTarget((self.address, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid, sub_oid, sub_id)))
errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
if errorIndication:
return False
else:
if errorStatus:
return False
else:
for varBind in varBinds:
return [x.prettyPrint() for x in varBind]
if __name__ == "__main__":
# 初始化
ptr = NetSNMP("192.168.1.101","public")
# 设置OID数据集
ret = ptr.GetNumber("HOST-RESOURCES-MIB","hrMemorySize",0)
print("类型: {} --> 返回结果: {} --> 解析: {}".format(type(ret),ret,ret[1]))