当前位置: 首页 > article >正文

什么SNMP协议,怎么使用python调用SNMP访问设备

SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用于管理和监控网络设备的标准协议。它允许网络管理员通过网络远程监控和管理网络设备,如路由器、交换机、服务器、打印机等。SNMP的主要目标是提供一种简单、标准化的方式来收集和交换网络管理信息。

一、SNMP的基本组件

SNMP由以下几个基本组件组成:

1、管理站(Manager)

  • 管理站是网络管理系统中的中心控制点,负责发送管理命令和接收来自代理的响应。
  • 管理站通常运行在网络管理软件上,如HP OpenView、SolarWinds、Nagios等。

2、代理(Agent)

  • 代理是驻留在被管理设备上的软件模块,负责收集设备的状态信息,并响应管理站的请求。
  • 代理还可以主动向管理站发送Trap消息,报告重要事件或异常情况。

3、管理信息库(MIB,Management Information Base)

  • MIB是一个虚拟数据库,存储了被管理设备的各种管理信息。
  • MIB中的信息以树形结构组织,每个节点代表一个管理对象。
  • 每个管理对象都有一个唯一的对象标识符(OID,Object Identifier)。

4、协议数据单元(PDU,Protocol Data Unit)

  • PDU是SNMP用来交换管理信息的报文格式。
  • 常见的PDU类型包括:
    • GetRequest:管理站请求获取代理的某个或某些管理对象的值。
    • GetNextRequest:管理站请求获取MIB树中下一个对象的值,用于遍历MIB树。
    • SetRequest:管理站请求设置代理的某个或某些管理对象的值。
    • GetBulkRequest:SNMPv2引入,用于高效地获取大量数据。
    • Response:代理对管理站的请求进行响应。
    • Trap:代理主动向管理站发送的异常或事件通知。
    • InformRequest:SNMPv2引入,允许管理站之间进行信息交换。
    • Report:SNMPv3引入,用于报告错误或状态信息。

二、SNMP 的版本

  • SNMPv1: 最早的 SNMP 版本,安全性较低。
  • SNMPv2c: SNMPv1 的改进版本,增加了新的数据类型和 MIB 功能,但安全性仍然存在问题。
  • SNMPv3: 最新版本的 SNMP 协议,提供了更强大的安全机制,包括用户认证、消息加密和访问控制。

三、SNMP 的应用

  • 网络监控: 监控网络设备的性能和状态,例如 CPU 使用率、内存使用率、接口状态等。
  • 网络配置: 远程配置网络设备,例如设置 IP 地址、路由表等。
  • 故障诊断: 诊断网络故障,例如网络连接中断、设备故障等。
  • 安全管理: 监控网络安全事件,例如入侵尝试、病毒攻击等。

 四、python调用snmpv3协议

1. 安装必要的库

首先,我们需要安装 pysnmp 库,它提供了 Python 中的 SNMP 功能。可以使用 pip 安装:

pip install pysnmp
2. 编写 Python 代码

接下来,我们将编写 Python 代码来实现 SNMPv3 连接。以下是一个示例代码,你可以根据你的爱快路由器的配置进行修改:

from pysnmp.entity.rfc3413.oneliner import cmdgen

# 爱快路由器 SNMPv3 配置
ip = '你的爱快路由器IP地址'
user = '你的SNMPv3用户名'
auth_key = '你的SNMPv3认证密码'
priv_key = '你的SNMPv3加密密码'
auth_protocol = 'usmHMACMD5AuthProtocol'  # 认证协议,可选值:usmHMACMD5AuthProtocol, usmHMACSHAAuthProtocol, usmHMAC128SHA224AuthProtocol, usmHMAC256SHA384AuthProtocol, usmNoAuthProtocol
priv_protocol = 'usmDESPrivProtocol'  # 加密协议,可选值:usmDESPrivProtocol, usm3DESEDEPrivProtocol, usmAesCfb128Protocol, usmAesCfb192Protocol, usmAesCfb256Protocol, usmNoPrivProtocol

# 创建 Command Generator 对象
cmdGen = cmdgen.CommandGenerator()

# 定义要获取的OID
oid = '1.3.6.1.2.1.1.1.0'  # 获取系统描述

# 使用 getCmd 方法获取数据
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.UsmUserData(user, auth_key, priv_key, authProtocol=eval(auth_protocol), privProtocol=eval(priv_protocol)),
    cmdgen.UdpTransportTarget((ip, 161)), 
    oid
)

# 检查错误
if errorIndication:
    print(f"错误:{errorIndication}")
elif errorStatus:
    print(f"错误:{errorStatus.prettyPrint()} at {errorIndex and varBinds[int(errorIndex) - 1][0] or '?'}")
else:
    # 打印结果
    for name, val in varBinds:
        print(f'{name.prettyPrint()} = {val.prettyPrint()}')
3. 代码讲解
  • 导入pysnmp库中的cmdgen模块
  • 设置爱快路由器的SNMPv3配置信息
    • 将 你的爱快路由器IP地址 替换为你的爱快路由器的实际 IP 地址。
    • 将 你的SNMPv3用户名 替换为你在爱快路由器上配置的 SNMPv3 用户名。
    • 将 你的SNMPv3认证密码 替换为你在爱快路由器上配置的 SNMPv3 认证密码。
    • 将 你的SNMPv3加密密码 替换为你在爱快路由器上配置的 SNMPv3 加密密码。
    • auth_protocol 和 priv_protocol 分别是认证协议和加密协议,根据你的爱快路由器配置选择合适的协议。
  • 创建SNMPv3 cmdGen对象
  • 设置要查询的OID
  • 使用getCmd方法获取数据
  • 检查错误信息,如果无错误则打印获取到的数据
4. 爱快路由器SNMPv3配置

确保你的爱快路由器已启用 SNMPv3,并已配置相应的用户名、认证密码和加密密码。 你可以在爱快路由器的 Web 管理界面中找到 SNMP 配置选项,一般在“高级设置”或“系统”菜单下。

5. 运行代码

将代码保存为 Python 文件(例如 snmpv3_aikua.py),然后在终端中运行:

python snmpv3_aikua.py

如果一切配置正确,你应该会看到从爱快路由器获取的系统描述信息。

一些常用的OID

  • 系统描述:1.3.6.1.2.1.1.1.0
  • 系统名称:1.3.6.1.2.1.1.5.0
  • 系统运行时间: 1.3.6.1.2.1.1.3.0
  • CPU利用率: 1.3.6.1.4.1.2021.11.11.0
  • 内存利用率: 1.3.6.1.4.1.2021.4.5.0
  • 网络流量: 1.3.6.1.2.1.2.2.1.10 (接口的传入字节数) 和 1.3.6.1.2.1.2.2.1.16 (接口的传出字节数)

注意:

  • 以上代码示例使用了常用的认证和加密协议,你可能需要根据你的爱快路由器配置进行调整。
  • 请确保你的爱快路由器和运行 Python 代码的设备之间网络连通。
  • 请将代码中的占位符替换为你的实际配置信息。


http://www.kler.cn/news/359282.html

相关文章:

  • 【移动应用开发】界面设计(二)实现水果列表页面
  • 关于测试用例的写法
  • 云原生-降本增效最佳案例分享-学习笔记
  • WEB前端作业1
  • GO语言指针有那些限制
  • QT sql驱动错误QMYSQL driver not loaded
  • 离线安装bitnami-gitlab8.8.4+汉化
  • Linux第一讲:Linux基本指令
  • Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能(手动输入的值只能是数字 并且支持4位小数)
  • Python单个数值字符串转化成时间戳
  • Unity水体交互
  • C++之《剑指offer》学习记录(5):数组中重复的数
  • MySQL 设计数据表
  • Android 中获取和读取短信验证码
  • es索引库操作和使用RestHignLevelClient客户端操作es
  • 家用wifi的ip地址固定吗?换wifi就是换ip地址吗
  • 【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)
  • 属于Navicat的时代落幕了
  • 如何使用xlnt创建多个sheet并写入内容后保存?
  • 即时通讯代码优化