如何使用Python的SNMP库对网络设备进行SNMP协议的访问,获取设备的基本信息和状态并存为json格式。请给出代码并解释
时间: 2024-05-08 11:18:17 浏览: 151
您好,以下是使用Python的SNMP库对网络设备进行SNMP协议的访问,获取设备的基本信息和状态并存为json格式的代码及解释:
```python
import json
from pysnmp.hlapi import *
# 设置要访问的设备IP地址、SNMP版本、团体名和OID信息
device_ip = '10.1.1.1'
snmp_version = SNMPVersion.community
community = CommunityData('public', mpModel=0)
oid_dict = {
'sysDescr': '1.3.6.1.2.1.1.1.0',
'sysUpTime': '1.3.6.1.2.1.1.3.0',
'sysContact': '1.3.6.1.2.1.1.4.0',
'sysName': '1.3.6.1.2.1.1.5.0',
'ifIndex': '1.3.6.1.2.1.2.2.1.1',
'ifDescr': '1.3.6.1.2.1.2.2.1.2',
'ifType': '1.3.6.1.2.1.2.2.1.3',
'ifMtu': '1.3.6.1.2.1.2.2.1.4',
'ifSpeed': '1.3.6.1.2.1.2.2.1.5',
'ifPhysAddress': '1.3.6.1.2.1.2.2.1.6',
'ifOperStatus': '1.3.6.1.2.1.2.2.1.8',
'ifInOctets': '1.3.6.1.2.1.2.2.1.10',
'ifOutOctets': '1.3.6.1.2.1.2.2.1.16',
}
# 构建OID列表
oid_list = [ObjectType(ObjectIdentity(oid_dict[key])).loadMibs('IF-MIB') for key in oid_dict]
# 发起SNMP协议访问并获取设备信息
result = {}
iterator = getCmd(SnmpEngine(), community, UdpTransportTarget((device_ip, 161)), ContextData(),
*oid_list, lookupMib=True)
for snmp_index, snmp_value in iterator:
for oid, value in snmp_value:
oid_str = str(oid)
value_str = str(value)
if oid_str in oid_dict.values():
for key in oid_dict:
if oid_dict[key] == oid_str:
if key == 'ifPhysAddress':
value_str = ':'.join([f"{c:02x}" for c in value])
result[snmp_index] = {**result.get(snmp_index, {}), key: value_str}
# 存为json格式
json_str = json.dumps(result, indent=4, sort_keys=True)
print(json_str)
```
代码说明:
1. 首先引入了json和pysnmp.hlapi库
2. 然后设置要访问的设备IP地址、SNMP版本、团体名和OID信息
3. 构建OID列表,这里使用了IF-MIB模块,因此需要先加载该模块
4. 发起SNMP协议访问并获取设备信息,使用了pysnmp库的getCmd接口,遍历返回结果,将获取到的值存入result字典中
5. 最后将结果以json格式进行输出
这样,就可以通过Python实现对网络设备进行SNMP协议的访问,获取设备的基本信息和状态,并且存为json格式。
阅读全文