< 返回动态ip列表

网络管理协议SNMP的相关介绍与应用

发布时间:2020-07-31    来源: 118云vps 阅读:
    1.1什么是SNMP
 
    SNMP是英文”Simple Network Management Protocol”的缩写,中文意思是”简单网络管理协议”。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。
    1.2SNMP协议构成
 
    SNMP协议主要由两大部分构成:
 
    SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员。
 
    SNMP代理运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。
 
    1.3SNMP工作方式
 
    两者之间是松耦合的关系,使用UDP协议进行通讯,默认端口是UDP161(也会用到162端口接收trap数据)
 
    SNMP管理站通过向SNMP代理发送请求命令(GetRequest, GetNextRequest, GetBulkRequest或InformRequest),当SNMP代理收到命令后返回响应(Response)
 
    SNMP管理站向SNMP代理发送SetRequest,代理设备执行设置操作。
 
    SNMP代理发生特定重要状况改变时主动向SNMP管理站发送Trap消息。
 
    1.4SNMP版本
 
    SNMP目前共有v1,v2,v3这三个版本:
 
    SNMP v1是SNMP协议的最初版本,不过依然是众多厂家实现SNMP基本方式。
 
    SNMP v2通常被指是基于community的SNMP V2。Community实质上就是密码,默认为public
 
    SNMP v3 是最新版本的SNMP。它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持。
 
    1.5什么是MIB和OID
 
    管理信息库(MIB,Management Information Base)MIB定义了受管设备必须保存的数据项、允许对每个数据项进行的操作及其含义,可以理解为SNMP代理维护的管理对象数据库,MIB中定义的大部分管理对象的状态和统计信息都可以被SNMP管理站进行访问。
 
    收录的MIB文档下载地址
 
    对象标识符(Object identifier, OID)用于定位管理信息库对象的一种方法。OID是一个整数序列,中间以”.”分割,这些整数构成一个树型结构,类似于DNS。OID结构示意图如下:
 
    二、SNMP应用举例
 
    2.1SNMP应用说明
 
    准备2台Linux云服务器,一台用于SNMP管理站,另一台用于SNMP代理。在SNMP管理站上对SNMP代理进行SNMP操作。
 
    2台服务器版本信息如下:
 
    操作系统版本:Ubuntu 18.04.2 LTS
 
    操作系统内核:4.15.0-45-generic
 
    SNMP管理站IP与hostname:172.16.1.247、ubuntu-efly-node-1
 
    SNMP代理IP与hostname:172.16.1.246、ubuntu-efly-node-2
 
    2.2创建SNMP管理站
 
    在SNMP管理站服务器上安装Net-SNMP,Net-SNMP是比较常用的SNMP管理工具。命令如下:
 
    Net-SNMP官方网站
 
    #安装Net-SNMP
 
    root@ubuntu-efly-node-1:~# apt install snmp -y
 
    #检查安装结果
 
    root@ubuntu-efly-node-1:~# snmpget -V
 
    NET-SNMP version: 5.7.3
 
    2.3创建SNMP代理
 
    在SNMP代理服务器上安装SNMP代理,命令如下:
 
    #安装SNMP代理服务
 
    root@ubuntu-efly-node-2:~# apt install snmpd snmp snmp-mibs-downloader -y
 
    #启动SNMP代理服务并设置开机启动
 
    root@ubuntu-efly-node-2:~# systemctl start snmpd
 
    root@ubuntu-efly-node-2:~# systemctl enable snmpd
 
    #检查SNMP代理服务是否启动成功
 
    root@ubuntu-efly-node-2:~# ss -lnu | grep 161
 
    UNCONN   0         0                 127.0.0.1:161              0.0.0.0:*
 
    在SNMP代理上,设置SNMP版本认证信息等。这里以使用snmp v2版本,community设置为public为例,命令如下:
 
    #修改snmp代理服务配置文件
 
    root@ubuntu-efly-node-2:~# cp /etc/snmp/snmpd.conf{,.ori}
 
    root@ubuntu-efly-node-2:~# vim /etc/snmp/snmpd.conf
 
    #修改snmp代理服务监听地址
 
    agentAddress  udp:172.16.1.246:161
 
    #修改snmp代理服务权限
 
    view systemonly included .1
 
    #修改后重启snmp代理服务
 
    root@ubuntu-efly-node-2:~# systemctl restart snmpd
 
    root@ubuntu-efly-node-2:~# ss -lnu | grep 161
 
    UNCONN   0         0              172.16.1.246:161              0.0.0.0:*
 
    2.4在SNMP管理站获取SNMP代理状态
 
    现在,我们可以在SNMP管理站服务器获取/设置SNMP代理服务器的相关信息。在获取SNMP代理的信息前,我们需要找到相关管理对象的OID,可以通过查看MIB库方式,更便捷的方法是直接到网上搜索。
 
    Linux下常用OID
 
    snmpget命令获取单个OID值
 
    #获取SNMP代理服务器hostname信息
 
    root@ubuntu-efly-node-1:~# snmpget -v 2c -c public 172.16.1.246:161 1.3.6.1.2.1.1.5.0
 
    iso.3.6.1.2.1.1.5.0 = STRING: "ubuntu-efly-node-2"
 
    #获取SNMP代理服务器物理内存大小
 
    root@ubuntu-efly-node-1:~# snmpget -v 2c -c public 172.16.1.246:161 1.3.6.1.4.1.2021.4.5.0
 
    iso.3.6.1.4.1.2021.4.5.0 = INTEGER: 10219176
 
    snmpwalk命令一次获取多个OID值
 
    #获取SNMP代理服务器内存相关所有值
 
    root@ubuntu-efly-node-1:~# snmpwalk -v 2c -c public 172.16.1.246:161 1.3.6.1.4.1.2021.4
 
    iso.3.6.1.4.1.2021.4.1.0 = INTEGER: 0
 
    iso.3.6.1.4.1.2021.4.2.0 = STRING: "swap"
 
    iso.3.6.1.4.1.2021.4.3.0 = INTEGER: 7811068
 
    iso.3.6.1.4.1.2021.4.4.0 = INTEGER: 7811068
 
    iso.3.6.1.4.1.2021.4.5.0 = INTEGER: 10219176
 
    iso.3.6.1.4.1.2021.4.6.0 = INTEGER: 9031188
 
    iso.3.6.1.4.1.2021.4.11.0 = INTEGER: 16842256
 
    iso.3.6.1.4.1.2021.4.12.0 = INTEGER: 16000
 
    iso.3.6.1.4.1.2021.4.13.0 = INTEGER: 10036
 
    iso.3.6.1.4.1.2021.4.14.0 = INTEGER: 2204
 
    iso.3.6.1.4.1.2021.4.15.0 = INTEGER: 648776
 
    iso.3.6.1.4.1.2021.4.100.0 = INTEGER: 0
 
    iso.3.6.1.4.1.2021.4.101.0 = ""
 
    #获取SNMP代理服务器1、5、15分钟负载
 
    root@ubuntu-efly-node-1:~# snmpwalk -v 2c -c public 172.16.1.246:161 1.3.6.1.4.1.2021.10.1.3
 
    iso.3.6.1.4.1.2021.10.1.3.1 = STRING: "0.00"
 
    iso.3.6.1.4.1.2021.10.1.3.2 = STRING: "0.00"
 
    iso.3.6.1.4.1.2021.10.1.3.3 = STRING: "0.00"
 
    三、SNMP开发举例
 
    3.1SNMP开发举例说明
 
    使用Python调用Net-SNMP包,实现获取SNMP代理信息。
 
    Python版本:Python 3.7.0
 
    Python Net-SNMP包:python3-netsnmp 1.1a1
 
    3.2安装开发环境
 
    1.安装Python 3.7.0
 
    (略)
 
    2.安装python3-netsnmp
 
    pip install python3-netsnmp
 
    3.3通过Python实现获取SNMP代理信息
 
    1.编写Python脚本
 
    import netsnmp
 
    """使用snmpget,获取SNMP代理服务器hostname信息和物理内存大小"""
 
    sess = netsnmp.Session(Version=2,
 
    DestHost='172.16.1.246',
 
    Community='public')
 
    sess.UseEnums = 1
 
    sess.UseLongNames = 1
 
    vars = netsnmp.VarList(netsnmp.Varbind('1.3.6.1.2.1.1.5', 0),
 
    netsnmp.Varbind('1.3.6.1.4.1.2021.4.5', 0))
 
    vals = sess.get(vars)
 
    print("v2 sess.get result: ", vals, "\n")
 
    2.运行Python脚本
 
    [root@centos7-node-1 python370]# python net_snmp_test.py
 
    v2 sess.get result:  (b'ubuntu-efly-node-2', b'10219176')