目录
零、简略
一、SNMP简单概述
1.1、什么是Snmp
1.2、为什么需要SNMP?
1.3、SNMP的基本组件
1.4、SNMP 和 UDP
1.5、Snmp版本
二、Snmp有关的基本概念
2.1、代理和管理站的模型
2.2、SNMP的操作命令
2.3、SNMP 报文
三、SNMP的运行过程
1.7 SNMP trap集成的流程
四、实践学习(Snmp 的安装和使用)
五、ubuntu配置 SNMPv2
5.1、配置节点
5.2.配置MIB库
5.3、配置共同体(可理解为密码)
5.4.允许远程主机访问
6.(远程)测试
七、Ubuntu系统下 配置snmp v3
7.1 添加初始用户
7.2 使用初始用户添加普通用户
7.3 SNMPv3管理服务访问
八、什么是SNMP trap?(被管理设备主动上发消息)
8.1 实现SNMP Trap的流程
8.2 关键功能亮点 (接收第三方SNMP Trap信息等)
8.3 snmptrap的发送与接收
Trap的发送与接收代码实现
Python实现
java实现
错误记录
添加自定义MIB(表格)
附录一《linux snmp常用结点值》
附录 2《CentOS7系统中SNMP MIB信息访问》
参考或摘抄文章列表
本文地址:https://blog.csdn.net/bandaoyu/article/details/125440208?spm=1001.2014.3001.5501,
本文大部分摘抄自:https://blog.csdn.net/sunrj_niu/article/details/124213758
零、简略
监测管理网络设备的工具。
SNMP="Simple Network Management Protocol"="简单网络管理协议",应用层协议,传输层一般采用UDP。
SNMP网络架构组成:NMS(网络管理站)、Agent(代理)、MIB(管理信息库)
Agent(代理)运行在被管理的网络节点上。NMS(网络管理站)负责收集维护各个SNMP 元素的信息(NMS主动向Agent请求,或Agent主动SNMP trap 上传),能请求/上传哪些内容去MIB中读取(MIB定义了设备中的被管理对象)。
管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。
一个SNMP管理的网络由3部分构成:
SNMP采用UDP 161端口接收和发送请求,162端口接收trap
一、SNMP简单概述
1.1、什么是Snmp
SNMP="Simple Network Management Protocol"="简单网络管理协议"。
SNMP协议简单可靠 ,成为目前众多厂商的网管协议。
SNMP网络架构组成:NMS(网络管理站)、Agent(代理)、MIB(管理信息库)
SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;
而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。
SNMP管理站和SNMP代理之间是松散耦合,MIB是NMS(网管系统)和Agent之间的沟通桥梁。他们之间的通信是通过UDP协议完成的。
一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。但是当SNMP代理检测到网络元素异常的时候,也可以主动向SNMP管理站发送消息,通告当前异常状况。
SNMP的工作方式:
管理员需要向设备获取数据,所以SNMP提供了【读】操作;
管理员需要向设备执行设置操作,所以SNMP提供了【写】操作;
设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了【Trap】操作。
1.2、为什么需要SNMP?
- 网络设备数量增多;
- 网络设备盖地域大,实时监控和故障排查变困难。
- 网络设备种类多,不同设备厂商提供的管理接口(如命令行接口)各不相同。
SNMP应运而生:
- 网络管理员可以利用SNMP平台在网络上的任意节点完成信息查询、信息修改和故障排查等工作,工作效率得以提高。
- 屏蔽了设备间的物理差异,实现对不同设备的统一管理,管理成本低。
- 设计简单、运行代价低,SNMP采用“尽可能简单”的设计思想,运行SNMP给设备造成的影响和代价都被最小化。
1.3、SNMP的基本组件
SNMP基本组件
- 网络管理系统NMS(Network Management System)
- 代理进程(Agent)
- 被管对象(Managed Object)
- 管理信息库MIB(Management Information Base)
如图所示他们共同构成SNMP的管理模型,在SNMP的体系结构中都起着至关重要的作用。
NMS
NMS 在网络中扮演管理者角色,是一个采用 SNMP 协议对网络设备进行管理/监视的系统,运行在 NMS 服务器上。
NMS 可向设备上的 Agent 发出请求,查询或修改一个或多个具体的参数值。也可以接收 Agent 主动发送的 Trap 信息,以获知被管理设备当前的状态。
Agent
Agent 是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自 NMS 的请求。Agent 接收到 NMS 的请求信息后,通过 MIB 表完成相应指令后,并把操作结果响应给 NMS。
当设备发生故障或者其它事件时,设备会通过 Agent 主动发送信息给 NMS,向NMS报告设备当前的状态变化。
MIB
管理信息库MIB:
任何一个被管理的资源称为被管理的对象,MIB是被管理对象的集合。
MIB定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。
每个SNMP设备(Agent)都有自己的MIB,NMS可以对MIB库中的对象的值进行读取或者设置。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。它们之间的关系如图1所示
- MIB是一个按照层次结构组织的树状结构,称为MIB树
- 每个被管对象对应树形结构的一个叶子节点,称为一个object,拥有唯一的数字标识符
- 网管通过读写MIB中的被管对象实现对设备的管理
MIB数据对象以一种树状分层结构进行组织,这个树状结构中的每个分枝都有一个专用的名字和一个数字形式的标识符。
结构树的分枝实际表示的是数据对象的逻 辑分组。而树叶,有时候也叫节点(node),代表了各个数据对象。在结构树中使用子树表示增加的中间分枝和增加的树叶。
使用这个树状分层结构,MIB浏览器能够以一种方便而且简洁的方式访问整个MIB数据库。MIB浏览器是这样一种工具,它可以遍历整棵MIB结构树,通常 以图形显示的形式来表示各个分枝和树叶对象。可以通过其数字标识符来查找MIB中的数据对象,这个数字标识符号从结构树的顶部(或根部)开始,直到各个叶 子节点(即数据对象)为止。
这种访问方式和文件系统的组织方式一致。两者的主要区别在于文件系统中的路径名可以以绝对也可以以相对方式表示,而MIB数据 对象只能以绝对方式表示,不能使用相对方式。
每一个节点都有一个对象标识符(OID)来唯一的标识,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点 通向它的路径。一个带标号节点可以拥有包含其它带标号节点作为它的子树,如果没有子树它就是叶子节点,它包含一个值并被称为对象。比如网络设备名的oid 是.1.3.6.1.2.1.1.5.0,其值为设备名称的字符串。
网络资源被抽象为对象进行管理。但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库 (MIB)。MIB作为设在代理者处的管理站访问点的集合,管理站通过读取MIB中对象的值来进行网络监控。管理站可以在代理者处产生动作,也可以通过修改变量值改变代理者处的配置。
通过 MIB,可以完成以下功能:
◆ Agent 通过 get 消息查询 MIB,可以获知设备当前的状态信息。
◆ Agent 通过 set 消息修改 MIB,可以设置设备的状态参数。
Management object
Management object 指被管理对象。每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件(如一块接口板),也可以是某些硬件,软件(如路由选择协议)及其的配置参数的集合。
1.4、SNMP 和 UDP
SNMP采用UDP协议在管理端和agent之间传输信息。 SNMP采用UDP 161端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口。SNMP消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。
1.5、Snmp版本
SNMP 目前共有 3 个版本,分别为 v1、v2 和 v3,说明如下:
SNMP v1:是 SNMP 协议的最初版本,在 1988 年被制定,并被 Internet 体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案。不过依然是众多厂家实现SNMP基本方式。
SNMP v2:是 1992 年发布的 SNMP 的第二个版本。它修订了第一版,并且在性能、安全、机密性和管理者之间通信等方面进行了大量改进。通常被指是基于community的SNMP V2。Community实质上就是密码。
SNMP v3:是目前最新的版本。它是 2004 年制定的,协议编号为 RFC3411-RFC3418(STD0062)。它为提升协议的安全性,增加了认证和密文传输功能,它对网络管理最大的贡献在于其安全性
SNMP v3实现原理SNMP v1、 SNMP v2基本一致,主要区别在于SNMP v1、 SNMP v2通过只读团体名、只读团体名连接,而SNMP v3通过鉴权和加密连接,增加了身份验证和加密处理。
SNMPv1、SNMPv2c与SNMPv3三者之间有什么区别?
二、Snmp有关的基本概念
2.1、代理和管理站的模型
Snmp分2种角色:SNMP管理站(manager,我们的本机127.0.0.1)和SNMP代理(agent, 我们要操作的机器,比如 192.168.1.144)。
管理站指的是运行了可以执行网络管理任务软件的服务器,通常被称作为网络管理工作站(NMS),NMS负责采样网络中agent的信息,并接受agent的trap。
代理是实际网络设备中用来实现SNMP功能的部分。代理在UDP的161端口接收NMS的读写请求消息,管理站在UDP的162端口接收代理的事件通告消息。
所以,一旦获取设备的访问权限(community,默认为public),就可以访问设备信息、改写和配置设备参数。由于采用UDP协议,不需要在代理和管理站之间保持连接。
2.2、SNMP的操作命令
SNMP协议之所以易于使用,这是因为它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap。
Get:管理站读取代理者处对象的值。它是SNMP协议中使用率最高的一个命令,因为该命令是从网络设备中获得管理信息的基本方式。
Set:管理站设置代理者处对象的值。它是一个特权命令,因为可以通过它来改动设备的配置或控制设备的运转状态。它可以设置设备的名称,关掉一个端口或清除一个地址解析表中的项等。
Trap: 代理者主动向管理站通报重要事件。它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。通常由服务器请求而获得的数据由服务器的161 端口接收。Trap 消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。管理站可相应的作出处理。
2.3、SNMP 报文
SNMP消息由"版本号"、"SNMP共同体名"和"协议数据单元(PDU)"构成,数据包的长度不是固定的。
版本识别符(version identifier):确保SNMP代理使用相同的协议,SNMP代理会直接抛弃与自己协议版本不同的数据报。
团体名(Community Name):基本的安全机制,网络管理员访问SNMP管理代理时的身份验证。类似于密码,默认值为 public。团体名(Community name)是管理代理的口令,管理员被允许访问数据对象的前提就是网络管理员知道网络代理的口令。如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。
协议数据单元(PDU):SNMP消息中的数据区
PDU的5种协议数据单元:
SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。
- get-request 请求查询
- get-next-request 请求查询
- set-request 设置
- get-response 对前边的三种报文进行响应
- trap上报告警
前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的
---》
get-request操作:从代理进程处提取一个或多个参数值。
get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值。
set-request操作:设置代理进程的一个或多个参数值。
《---
get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。
trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。
三、SNMP的运行过程
驻留在被管设备上的AGENT从UDP端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果。
下面根据RFC1157详细介绍Agent接受到报文后采取的动作:
首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。
第二步:将报文中的版本号取出,如果与本Agent支持的SNMP版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP版本1。
第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。
第四步:从通过验证的ASN.1对象中提出协议数据单元PDU,如果失败,丢弃报文,不做进一不处理。否则处理PDU,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。
根据不同的PDU,SNMP协议实体将做不同的处理:
1.7 SNMP trap集成的流程
https://blog.csdn.net/dengxiangbao3167/article/details/102365138
SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制,当设备(路由器)的出现问题的时候,可以向服务器传报消息,可以看成是管理服务器被动的去接收的过程。
所以会有很多的工具会把snmptrap集成到自己的工具中,对网络设备进行监控。把SNMP trap集成的到Nagios当中的,大体的工作流程是见《简单工作流程》https://blog.csdn.net/dengxiangbao3167/article/details/102365138
把SNMP trap集成的到Nagios当中的,大体的工作流程是:
1. 由snmptrapd来接收网络设备发出的trap
2. snmptrapd调用snmptt(snmp trap translator 翻译器)
3. snmptt中定义了每一种trap的级别,以及什么样的trap才有必要写入到syslog中
4. SEC(simple event correlator是一个事件收集器)从syslog中读取每一个事件,并把调用用户的脚本snmptraphandling.py 来处理。
5. snmptraphandling.py 会调用根据主机名和trap的级别来调用相当的Nagios命令行。
当snmptrapd接收到trap以后,可以调用用户自定义的脚本或者命令行来处理trap。如果想使用这个功能就需要在snmptrapd的配置文件中设置traphandle。
snmptrapd接收到的trap信息格式是:
1. 数据包来源的主机名字。
2. 数据包来源的ip地址。
3. 数据包中的内容。
traphandle的工作就是读取这些内容并进行处理就可以了。
Trap信息例子:
cisco2611.lon.altinity
192.168.10.20
RFC1213-MIB::sysUpTime.0 0:18:14:45.66
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkDown
RFC1213-MIB::ifIndex.2 2
RFC1213-MIB::ifDescr.2 "Serial0/0"
RFC1213-MIB::ifType.2 ppp
OLD-CISCO-INTERFACES-MIB::locIfReason.2 "administratively down"
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.10.20
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 "public"
SNMPv2-MIB::snmpTrapEnterprise.0 CISCO-SMI::ciscoProducts.186
因为snmptt对trap信息中的OID进行了翻译,如果不进行翻译的话,那么trap信息的样子应该是
cisco2611.lon.altinity
192.168.10.20
.1.3.6.1.2.1.1.3.0 0:18:13:59.95
.1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.6.3.1.1.5.3
.1.3.6.1.2.1.2.2.1.1.2 2
.1.3.6.1.2.1.2.2.1.2.2 "Serial0/0"
.1.3.6.1.2.1.2.2.1.3.2 ppp
.1.3.6.1.4.1.9.2.2.1.1.20.2 "administratively down"
.1.3.6.1.6.3.18.1.3.0 192.168.10.20
.1.3.6.1.6.3.18.1.4.0 "public"
.1.3.6.1.6.3.1.1.4.3.0 .1.3.6.1.4.1.9.1.186
这就说明了,snmptt拥有自己的配置文件,文件中包含了OID和对应的属性名,并且是使用OID来进行索引的。
如果snmptt在配置文件中无法找到对应的OID的话,那么snmptt也就无法对信息进行翻译,我们看到的信息内容也就是原始的格式了。
snmptt使用的配置文件叫做MIBs(Management Information Base管理信息基础),在MIBs以OID为索引的key,可以快速查找到对应的文字形式和警告的级别。每一个MIB都有自己固定的定义格式,其中会包含一个宏(用来说明要显示信息的内容)。
可是为什么要有MIBs的存在呢?直接由snmptrapd来完成OID到信息的翻译不可以么?
1. MIBs是可以由用户自己来定义,使用的。
因为各厂商对trap信息定义的内容肯定是不同的,所以想要snmp有一定的扩展性,那么就必须要支持用户自定义MIBs文件。这也就是MIBs存在的原因。
2. 如果由snmptrapd自己来完成翻译也是可以的,因为如果每次都去通过检索OID对应的消息的话,那对性能的影响是非常的大的,因此snmptrapd就需要读入MIBs。问题也就出现了,如果更新MIBs话,就要把snmptrapd重新启动,必定会影响到trap消息的接收。所以把snmptt作为一个独立的deamon存在是很正确的选择。
最后要做的事情就是添加traphandle了,handle会影响到snmptrap的接收性能,所以处理的速度要快,因为handle有可能1秒中会有数百次的调用。
这样以来上面的处理流程就可以进行简化的:
1. snmptrapd接收到trap的信息
2. snmptrapd调用handle(如果不是调用现有的命令的话,在handle中就可以完成所有的处理了,就没有下面的处理了。又节省了一步,哈哈)
3. handle中再调用Nagios的命令行就可以了
这样一看流程就简单许多了,以后再使用snmptrap的时候也可以参考这个处理的流程
四、实践学习(Snmp 的安装和使用)
我们需要安装下面三个软件包:
snmpd:snmp服务端软件
snmp:snmp客户端软件
snmp-mibs-downloader:用来下载更新本地mib库的软件
1、安装这三个软件:
德班系:
sudo apt-get install snmpd snmp snmp-mibs-downloader
如果搜不到安装包可以用yum whatprovides snmpd 查是哪个安装包提供。
再安装:net-snmp 、net-snmp-utils,否则 snmpwalk: command not found
yum -y install net-snmp net-snmp-utils
centOS 7的见:参考《CentOS7系统中SNMP MIB信息访问 》http://t.csdn.cn/A9LOU 见附录
2、安装成功状态检查:
## 查看状态
sudo service snmpd status
如果是未激活状态可以用命令:service snmpd start 激活
## 测试看看服务是否正常
root@apig:/usr/share/snmp# snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.1.1
iso.3.6.1.2.1.1.1.0 = STRING: "Linux apig 4.15.0-175-generic #184-Ubuntu SMP Thu Mar 24 17:48:36 UTC 2022 x86_64"
## 没有问题,有信息返回,那么接下来就直接进行各种配置了,不过在开始配置前先备份一下配置文件:
root@apig:/etc/snmp# sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.ori
root@apig:/etc/snmp# ls /etc/snmp
snmp.conf snmpd.conf snmpd.conf.ori
root@apig:/usr/share/snmp# ls /usr/share/snmp
mib2c-data mibs snmpconf-data snmp_perl.pl
## 注意:如果没有mibs,需要手动安装 `sudo download-mibs`
需要注意的是,在安装snmp-mibs-downloader的过程中,程序会帮我们自动下载mib库,并保存在/usr/share/snmp/mibs目录中
五、ubuntu配置 SNMPv2
5.1、配置节点
修改/etc/snmp/snmpd.conf
文件,大概在45行,将下面的两行注释掉:
# view systemonly included .1.3.6.1.2.1.1
# view systemonly included .1.3.6.1.2.1.25.1
增加下面一行:
view systemonly included .1
这样的话,我们就可以获取更多的节点信息,因为如果不这样做,我们能够获取的信息,仅仅是上面两个注释掉的节点所包含的信息。
修改之后,重启snmp服务,再使用命令观察一下:
root@apig:/etc/snmp# sudo service snmpd restart
root@apig:/etc/snmp# snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0
iso.3.6.1.4.1.2021.4.3.0 = INTEGER: 4194300
OK,没有问题!不过需要注意的是,这里.1.3.6.1.4.1.2021.4.3.0表示的是LInux主机交换空间总量的一个节点,而输出4194300,就说明我们的主机上的交换空间总量大概就是4GB左右。
5.2.配置MIB库
虽然上面已经可以正常获取我们想要的信息,但是输出结果很不直观,这时我们配置一下MIB库就可以了,不过需要注意的是,这个配置是对客户端软件的配置(只不过现在还是在我的同一台服务器主机上进行操作)。
修改/etc/snmp/snmp.conf配置文件,将下面这一行注释掉:
# mibs :
然后重启snmp服务,再通过命令观察:
root@apig:/etc/snmp# sudo service snmpd restart
root@apig:/etc/snmp# snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 4194300 kB
## 可以看到,现在的输出就非常直观了!这样之后,其实我们在获取相关节点信息时,也可以不用输入那一长串的数字了:
root@apig:/etc/snmp# snmpwalk -v 2c -c public localhost memTotalSwap.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 4194300 kB
root@apig:/etc/snmp# snmpwalk -v 2c -c public localhost memTotalReal.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8142012 kB
关于MIB库的节点值从哪里来,不需要去记,可以在网上找 https://blog.51cto.com/xpleaf/1757162
需要注意的是,现在只是在服务器端进行配置和测试,其实这一步的操作应该是在客户端(另一台主机上)完成的,这里只是为了方便。
5.3、配置共同体(可理解为密码)
其实所谓共同体,把它理解为一个密码就行了,前面我们在使用snmpwalk命令获取主机的信息时,有一个-c public的参数,其实就是指定了这个共同体为public,这是默认的配置,当然在实际中,我们不可能使用默认的值,因此需要把它修改一下。
修改配置文件/etc/snmp/snmpd.conf,大概在52行,将下面的两行:
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
修改为:
rocommunity sunrj123 default -V systemonly
rocommunity6 sunrj123 default -V systemonly
那么这里就把共同体修改为sunrj123 了,重启snmp服务,通过命令观察一下:
root@apig:/etc/snmp# snmpwalk -v 2c -c public localhost memTotalReal.0
Timeout: No Response from localhostroot@apig:/etc/snmp# snmpwalk -v 2c -c sunrj123 localhost memTotalReal.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8142012 kB
可以看到第一次获取信息不成功,因为我们已经更新了共同体,旧的public将不能再使用,否则认证失败就无法获取snmp提供的主机信息。
5.4.允许远程主机访问
默认情况下,snmp服务只是对本地开启,是无法通过远程获取该主机的snmp信息的:
root@apig:/etc/snmp# sudo netstat -antup | grep 161
udp 0 0 127.0.0.1:161 0.0.0.0:* 19410/snmpd
可以看到,161端口只对本机开放(161端口号是snmp服务的端口号),我们需要修改一下,让snmp服务对外开放。
修改/etc/snmp/snmpd.conf
配置文件,大概在15行,将下面一行注释掉:
agentAddress udp:127.0.0.1:161
同时去掉下面这一行的注释:
#agentAddress udp:161,udp6:[::1]:161
重新启动snmp服务,再通过命令观察:
root@apig:/etc/snmp# sudo service snmpd restart
root@apig:/etc/snmp# sudo netstat -antup | grep 161
udp 0 0 0.0.0.0:161 0.0.0.0:* 19770/snmpd
udp6 0 0 ::1:161 :::* 19770/snmpd
6.(远程)测试
在服务器本地我们已经做过测试,并且没有问题,下面我们要做的是在远程主机进行测试。
我另一台远程主机上的操作系统也是Ubuntu 15.04,并且已经安装了snmp客户端软件和mib库下载软件,同时配置了MIB库,下面就直接进行远程的测试:
xpleaf@leaf:~$ snmpwalk -v 2c -c sunrj123 115.159.*.* memTotalSwap.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1950716 kB
xpleaf@leaf:~$ snmpwalk -v 2c -c sunrj123 115.159.*.* memTotalReal.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8093524 kB
xpleaf@leaf:~$ snmpwalk -v 2c -c sunrj123 115.159.*.* .1.3.6.1.4.1.2021.9.1.6.1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 8123832
可以看到,测试完全没有问题!并且获取的值和前面有服务器本地得到的一样。
当然,如果你发现还是获取不了的,那么你就需要考虑一下在服务器的主机上防火墙的设置有没有问题了。
七、Ubuntu系统下 配置snmp v3
SNMP v3版本主要添加了用户访问权限和加密通讯,下面给出SNMP v3添加用户流程:
7.1 添加初始用户
修改SNMP代理程序配置文件vi /etc/snmp/snmpd.conf
,在最后一行添加初始用户bootstap
...
createUser bootstrap MD5 temp_password DES
其中认证方式支持:MD5(推荐)、SHA-1,加密方式支持:DES、AES。现在添加了用户初始用户bootstrap
,下面步骤中会使用初始用户添加其他用户。添加用户后可以设置用户权限:rwuser
读写用户、rouser
只读用户。
7.2 使用初始用户添加普通用户
在3.1节中定义了用户demo
,但是没有添加。可以使用snmpusm
命令添加
# -l 指定安全级别,noAuthNoPriv(不认证不加密),authNoPriv(认证不加密),authPriv(认证加密)
# -a 认证算法
# -x 加密算法
# -A 认证密码
# -X 加密密码
snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap
snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A 12345678 -X 12345678 localhost:65000 create demo bootstrap
User successfully created. # 显示添加用户成功
上面命令添加的用户demo
认证和加密信息与用户bootstrap
相同。可以使用如下命令修改用户认证密码,此密码至少为8位:
snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password
snmpusm -u demo -l authPriv -a MD5 -x DES -A 12345678 -X 12345678 localhost:65000 passwd 12345678 123456789
SNMPv3 Key(s) successfully changed.
# 删除用户
snmpusm -u demo -l authPriv -a MD5 -x DES -A 12345678 -X 12345678 localhost:65000 delete demo
User successfully deleted.
7.3 SNMPv3管理服务访问
可以使用以下命令访问:
# -u 指定用户
# agent_server_ip_address: 代理服务地址和端口
snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address 1.3.6.1.2.1.1.1.0
以上用户认证加密信息可以更方便地写到/etc/snmp/snmp.conf
配置文件中:
defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase new_password
defPrivPassphrase new_password
命令行选项 描述 转换的 snmp.conf 指令
-u username SNMPv3用于认证的用户名 defSecurityName username
-l authPriv 认证的安全等级 defSecurityLevel authPriv
-a MD5 认证协议 defAuthType MD5
-x DES 加密协议 defPrivType DES
-A passphrase 指定用户的认证密码 defAuthPassphrase passphrase
-X passphrase 指定用户的加密密码 defPrivPassphrase passphrase
配置好snmp.conf文件后,可以使用snmpget agent_server_ip_address sysUpTime.0访问SNMPv3代理。
相关命令:
–v:指定snmp的版本, 1或者2,该参数必须有。
–c:指定连接设备SNMPSNMP读团体密码,该参数必须有。
IP:指定要walk的设备的IP地址,该参数必须有。
OID:代表要获取设备的指标oid,该参数不是必须的。
snmpwalk -v 2c -c public localhost ipAddrTable
snmpwalk -v 2c -c public localhost ipNetToMediaTable
snmpwalk -v 2c -c public localhost ifTable
snmpwalk -v 2c -c public localhost ifDescr.1
snmpwalk -v 2c -c public localhost sysDescr
snmpwalk -v 2c -c public localhost ipNetToMediaPhysAddress.3.192.168.31.212
snmpwalk -v 2c -c public localhost tcpConnState //获取tcp连接状态
snmpwalk -v 2c -c public localhost tcpConnLocalAddress
snmpwalk -v 2c -c public localhost tcpConnLocalPort
snmpwalk -v 2c -c public192.168.237.50 .1.3.6.1.4.1.2021.10.1.3 #监控cpuload
snmpwalk -v 2c -c public 10.1.1.1 .1.3.6.1.2.1.25.2.2 取得系统总内存
snmpwalk -v 2c -c public 10.1.1.1 hrSystemNumUsers 取得系统用户数(注意:hrSystemNumUsers与.1.3.6.1.2.1.25.1.5是等效的)
snmpwalk -v 2c -c public 10.1.1.1 .1.3.6.1.2.1.4.20 取得IP信息
snmpwalk -v 2c -c public 10.1.1.1 system 查看系统信息
snmpwalk -v 2c -c public 10.1.1.1 ifDescr 获取网卡信息
snmpwalk 是对应 key值;
snmpget 是 对应 oid
snmpwalk是对OID值的遍历(比如某个OID值下面有N个节点,则依次遍历出这N个节点的值。如果对某个叶子节点的OID值做walk,则取得到数据就不正确了,因为它会认为该节点是某些节点的父节点,而对其进行遍历,而实际上该节点已经没有子节点了,那么它会取出与该叶子节点平级的下一个叶子节点的值,而不是当前请求的节子节点的值。)
snmpget是取具体的OID的值。(适用于OID值是一个叶子节点的情况)
e.g.
snmpwalk -v 2c -c 团体名 10.68.133.1 ifInDiscards
snmpget -v 2c -c 团体名 100.80.32.23 1.3.6.1.2.1.1.5.0
八、什么是SNMP trap?(被管理设备主动上发消息)
几乎所有的网络设备的都需要支持SNMP,而且现在还有很多的开源的网络管理系统。
SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制,当设备(路由器)的出现问题的时候,可以向服务器传报消息,可以看成是管理服务器被动的去接收的过程。
8.1 实现SNMP Trap的流程
◆SNMP Trap接收服务一直在端口162等待着请求,一旦接受任何请求,将发给SNMP Trap翻译。
◆通过MIB库的已知设备信息,SNMP Trap将会尽可能翻译Varbind的信息。
◆通过可配置的业务规则,可决定如何处理或者丢弃告警。
◆把产生的告警展现在事件管理,并且能产生相关的报警,提醒相关IT管理员。
◆如果事件与工单有绑定,可以触发相关工单。
◆系统管理员也可以通过不同格式的文件,导入新的设备信息进入Mocha BSM的MIB库。
8.2 关键功能亮点 (接收第三方SNMP Trap信息等)
◆事件驱动,***时间收到设备故障告警
◆提供SNMP Trap的接收,并通过对Trap信息翻译,展现事件
◆支持SNMP Trap的接收规则定义,过滤无用Trap信息
◆接收来自第三方管理软件SNMP Trap信息,或向第三方管理软件发送Trap信息,达到整合效果
◆定制SNMP Trap告警规则触发告警,提供多种方式发送告警信息
◆支持事件导出
◆支持各类设备厂家MIB库的导入
8.3 snmptrap的发送与接收
首先是管理方,需要先配置snmptrapd.conf,可以将之放在与snmpd.conf同一个路径下(/etc/snmp/snmptrapd.conf)
配置snmptrapd.conf:
# 其中authcommunity是为了设置所有用户的访问权限:可执行,记录,传递。
# 设置traphandle(即收到.1.3.6.1.4.1.2021.251.1类OID信息时,执行test.pl)。
authcommunity execute,log,net public
traphandle .1.3.6.1.4.1.2021.251.1 /root/traptest/test.pl
test.pl:
#!/usr/bin/perl
use strict;
my $file="file.trap";
open(HANDOUT,">>./$file");
while()
{
print HANDOUT "$_";
}
将此配置文件设置为默认配置文件,并启动snmptrapd进程:
snmptrapd -c /etc/snmp/snmptrapd.conf
监听并接收trap:
snmptrap -v 2c -c sunrj123 10.2.2.127:162 "" .1.3.6.1.4.1.2021.251.1 sysLocation.0 s "this is test"
而后在管理方会接收到如下信息:
团队名:
团体名:communitystring。缺省是public,但一般为了安全起见,设备管理者都会改成自己的,相当于密码,用户不可能看到。
Trap的发送与接收代码实现
Python实现
python的实现依赖pysnmp库, PySNMP是一个纯粹用Python实现的SNMP。
下载 安装pysnmp-4.2.5.tar.gz (md5)
https://pypi.python.org/pypi/pysnmp/
发送
(转自:python pysnmp使用 - https://www.cnblogs.com/xzlive/p/13246509.html)
用PySNMP的最抽象的API是One-line Applications。其中有两类API:同步的和非同步的,都在模块pysnmp.entity.rfc3413.oneliner.cmdgen 中实现。
所以在使用的时候为了方便,可以
1 2 3 4 5 |
|
getCmd()需要三个参数:
1.cmdgen.CommunityData() ##社区信息 传入三个数据,安全my-agent、社区名public、snmp协议版本,之间用逗号隔开,例如 cmdgen.CommunityData('my-agent', 'public', 1)
2.cmdgen.UdpTransportTarget() ##通道参数,传入一个元组,包含主机IP/域名和端口,例如:cmdgen.UdpTransportTarget(('192.168.70.237', 161)
3. OID ##mib值,例如 '.1.3.6.1.4.1.1800.5.13.2'
注意:三个参数之间用 ","隔开。
下面上个例子是获得设备snmp数据,传到192.168.70.237:
from pysnmp.entity.rfc3413.oneliner import cmdgen
def snmpget():
cg = cmdgen.CommandGenerator() ##获得CommandGenerator对象
errorIndication, errorStatus, errorIndex, varBinds = cg.getCmd(
#0代表v1,1代表v2c
cmdgen.CommunityData('my-agent', 'public', 1), ##社区信息,my-agent ,public 表示社区名,1表示snmp v2c版本,0为v1版本
cmdgen.UdpTransportTarget(('192.168.70.237', 161)),##这是传输的通道,传输到IP 192.168.70.237, 端口 161上(snmp标准默认161 UDP端口)
'.1.3.6.1.4.1.1800.5.13.2' ##传送的OID,个人认为MIB值
)
print str(varBinds[0][1]); ##varBinds返回是一个stulp,含有MIB值和获得值
def runit(loop=1):
for i in range(loop):
snmpget()
#print i
if __name__ == "__main__":
runit(loop=1)
接收
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher
from pysnmp.carrier.asynsock.dgram import udp, udp6
from pyasn1.codec.ber import decoder
from pysnmp.proto import api
from test_case_common import *
def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
while wholeMsg:
msgVer = int(api.decodeMessageVersion(wholeMsg))
if msgVer in api.protoModules:
pMod = api.protoModules[msgVer]
else:
print('Unsupported SNMP version %s' % msgVer)
return
reqMsg, wholeMsg = decoder.decode(
wholeMsg, asn1Spec=pMod.Message(),
)
print('Notification message from %s:%s: ' % (
transportDomain, transportAddress
)
)
reqPDU = pMod.apiMessage.getPDU(reqMsg)
if reqPDU.isSameTypeWith(pMod.TrapPDU()):
if msgVer == api.protoVersion1:
print('Enterprise: %s' % (
pMod.apiTrapPDU.getEnterprise(reqPDU).prettyPrint()
)
)
print('Agent Address: %s' % (
pMod.apiTrapPDU.getAgentAddr(reqPDU).prettyPrint()
)
)
print('Generic Trap: %s' % (
pMod.apiTrapPDU.getGenericTrap(reqPDU).prettyPrint()
)
)
print('Specific Trap: %s' % (
pMod.apiTrapPDU.getSpecificTrap(reqPDU).prettyPrint()
)
)
print('Uptime: %s' % (
pMod.apiTrapPDU.getTimeStamp(reqPDU).prettyPrint()
)
)
varBinds = pMod.apiTrapPDU.getVarBindList(reqPDU)
else:
varBinds = pMod.apiPDU.getVarBindList(reqPDU)
print('Var-binds:')
for oid, val in varBinds:
a = oid.prettyPrint().strip()
b = val.prettyPrint().strip().split('\n')
print a
for line in b:
item = line.strip()
if item.startswith('string-value'):
print 'string-value='+item.replace('string-value=0x','').decode('hex')
else:
print item
return wholeMsg
if __name__ == '__main__':
transportDispatcher = AsynsockDispatcher()
transportDispatcher.registerRecvCbFun(cbFun)
# UDP/IPv4
transportDispatcher.registerTransport(
udp.domainName, udp.UdpSocketTransport().openServerMode(('0.0.0.0', 162))
)
# UDP/IPv6
transportDispatcher.registerTransport(
udp6.domainName, udp6.Udp6SocketTransport().openServerMode(('::1', 162))
)
transportDispatcher.jobStarted(1)
try:
# Dispatcher will never finish as job#1 never reaches zero
transportDispatcher.runDispatcher()
except:
transportDispatcher.closeDispatcher()
raise
java实现
参考文章:https://blog.csdn.net/weixin_42551921/article/details/117479344
错误记录
如果本地测试ok,远程测试出现如下报错:
1、No Such Object available on this agent at this OID或
No more variables left in this MIB View (It is past the end of the MIB tree)
修改snmpd.conf(/etc/snmp/snmpd.conf),并重启snmpd(service snmpd restart)
access notConfigGroup "" any noauth exact systemview none none
-->
access notConfigGroup "" any noauth exact all none none
在snmpd.conf配置文件里面,查找以下字段:[/color]
## incl/excl subtree mask
#view all included .1 80
将该行前面的"#"去掉.
之后重启snmpd服务解决。
添加自定义MIB(表格)
net-snmp添加自定义MIB(表格)_https://blog.csdn.net/qq_36849711/article/details/119203952
net-snmp添加自定义MIB(表格) - https://www.cnblogs.com/kiko2014551511/p/13370768.html
net-snmp添加自定义MIB(标量和表格) - https://www.pianshen.com/article/94151944961/
附录一《linux snmp常用结点值》
MIB和OID对应关系查看命令:snmptranslate -Tz -m all
https://blog.51cto.com/xpleaf/1757162
0.说明
因为最近要开发基于snmp的监控软件,所以先在Linux上玩玩,毕竟我要监控的不是Linux主机(这个就很好办了),而是要监控交换机的一些系统参数。
在网上网罗了一番,整理一下。给点小tips,如果真的想玩snmp监控,或者自己开发相关监控软件,建议一定一定要看下《TCP/IP详解 卷1:协议》的知识,不然你都不知道你在干嘛,整天百度也是没有什么用的。
1.针对Linux主机的对象标识符
(1)CPU负载
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
(2)CPU信息
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
(3)内存使用
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
(4)磁盘使用
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
(5)系统运行时间
.1.3.6.1.2.1.1.3.0
1. 当然,其实这个是mib下的,也就是公有的。
2.MIB对象标识符
也就是公有的对象标识符。
(1)System组
都是一些简单变量,没有table:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
sysLocation 1.3.6.1.2.1.1.6
sysServices 1.3.6.1.2.1.1.7
(2)Interfaces组
一个简单变量:
ifNumber 1.3.6.1.2.1.2.1
1. 一个ifTable表(表格变量):ifTable 1.3.6.1.2.1.2.2
ifEntry 1.3.6.1.2.1.2.2.1
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
ifAdminStatus 1.3.6.1.2.1.2.2.1.7
ifOperStatus 1.3.6.1.2.1.2.2.1.8
ifLastChange 1.3.6.1.2.1.2.2.1.9
ifInOctets 1.3.6.1.2.1.2.2.1.10
ifInUcastPkts 1.3.6.1.2.1.2.2.1.11
ifInNUcastPkts 1.3.6.1.2.1.2.2.1.12
ifInDiscards 1.3.6.1.2.1.2.2.1.13
ifInErrors 1.3.6.1.2.1.2.2.1.14
ifInUnknownProtos 1.3.6.1.2.1.2.2.1.15
ifOutOctets 1.3.6.1.2.1.2.2.1.16
ifOutUcastPkts 1.3.6.1.2.1.2.2.1.17
ifOutNUcastPkts 1.3.6.1.2.1.2.2.1.18
ifOutDiscards 1.3.6.1.2.1.2.2.1.19
ifOutErrors 1.3.6.1.2.1.2.2.1.20
ifOutQLen 1.3.6.1.2.1.2.2.1.21
ifSpecific 1.3.6.1.2.1.2.2.1.22
(3)IP组
不区分简单变量和表格变量,直接给出了:
ipForwarding 1.3.6.1.2.1.4.1
ipDefaultTTL 1.3.6.1.2.1.4.2
ipInReceives 1.3.6.1.2.1.4.3
ipInHdrErrors 1.3.6.1.2.1.4.4
ipInAddrErrors 1.3.6.1.2.1.4.5
ipForwDatagrams 1.3.6.1.2.1.4.6
ipInUnknownProtos 1.3.6.1.2.1.4.7
ipInDiscards 1.3.6.1.2.1.4.8
ipInDelivers 1.3.6.1.2.1.4.9
ipOutRequests 1.3.6.1.2.1.4.10
ipOutDiscards 1.3.6.1.2.1.4.11
ipOutNoRoutes 1.3.6.1.2.1.4.12
ipReasmTimeout 1.3.6.1.2.1.4.13
ipReasmReqds 1.3.6.1.2.1.4.14
ipReasmOKs 1.3.6.1.2.1.4.15
ipReasmFails 1.3.6.1.2.1.4.16
ipFragsOKs 1.3.6.1.2.1.4.17
ipFragsFails 1.3.6.1.2.1.4.18
ipFragCreates 1.3.6.1.2.1.4.19
ipAddrTable 1.3.6.1.2.1.4.20
ipAddrEntry 1.3.6.1.2.1.4.20.1
ipAdEntAddr 1.3.6.1.2.1.4.20.1.1
ipAdEntIfIndex 1.3.6.1.2.1.4.20.1.2
ipAdEntNetMask 1.3.6.1.2.1.4.20.1.3
ipAdEntBcastAddr 1.3.6.1.2.1.4.20.1.4
ipAdEntReasmMaxSize 1.3.6.1.2.1.4.20.1.5
(4)ICMP组
icmpInMsgs 1.3.6.1.2.1.5.1
icmpInErrors 1.3.6.1.2.1.5.2
icmpInDestUnreachs 1.3.6.1.2.1.5.3
icmpInTimeExcds 1.3.6.1.2.1.5.4
icmpInParmProbs 1.3.6.1.2.1.5.5
icmpInSrcQuenchs 1.3.6.1.2.1.5.6
icmpInRedirects 1.3.6.1.2.1.5.7
icmpInEchos 1.3.6.1.2.1.5.8
icmpInEchoReps 1.3.6.1.2.1.5.9
icmpInTimestamps 1.3.6.1.2.1.5.10
icmpInTimestampReps 1.3.6.1.2.1.5.11
icmpInAddrMasks 1.3.6.1.2.1.5.12
icmpInAddrMaskReps 1.3.6.1.2.1.5.13
icmpOutMsgs 1.3.6.1.2.1.5.14
icmpOutErrors 1.3.6.1.2.1.5.15
icmpOutDestUnreachs 1.3.6.1.2.1.5.16
icmpOutTimeExcds 1.3.6.1.2.1.5.17
icmpOutParmProbs 1.3.6.1.2.1.5.18
icmpOutSrcQuenchs 1.3.6.1.2.1.5.19
icmpOutRedirects 1.3.6.1.2.1.5.20
icmpOutEchos 1.3.6.1.2.1.5.21
icmpOutEchoReps 1.3.6.1.2.1.5.22
icmpOutTimestamps 1.3.6.1.2.1.5.23
icmpOutTimestampReps 1.3.6.1.2.1.5.24
icmpOutAddrMasks 1.3.6.1.2.1.5.25
icmpOutAddrMaskReps 1.3.6.1.2.1.5.26
(5)TCP组
tcpRtoAlgorithm 1.3.6.1.2.1.6.1
tcpRtoMin 1.3.6.1.2.1.6.2
tcpRtoMax 1.3.6.1.2.1.6.3
tcpMaxConn 1.3.6.1.2.1.6.4
tcpActiveOpens 1.3.6.1.2.1.6.5
tcpPassiveOpens 1.3.6.1.2.1.6.6
tcpAttemptFails 1.3.6.1.2.1.6.7
tcpEstabResets 1.3.6.1.2.1.6.8
tcpCurrEstab 1.3.6.1.2.1.6.9
tcpInSegs 1.3.6.1.2.1.6.10
tcpOutSegs 1.3.6.1.2.1.6.11
tcpRetransSegs 1.3.6.1.2.1.6.12
tcpConnTable 1.3.6.1.2.1.6.13
tcpConnEntry 1.3.6.1.2.1.6.13.1
tcpConnState 1.3.6.1.2.1.6.13.1.1
tcpConnLocalAddress 1.3.6.1.2.1.6.13.1.2
tcpConnLocalPort 1.3.6.1.2.1.6.13.1.3
tcpConnRemAddress 1.3.6.1.2.1.6.13.1.4
tcpConnRemPort 1.3.6.1.2.1.6.13.1.5
tcpInErrs 1.3.6.1.2.1.6.14
tcpOutRsts 1.3.6.1.2.1.6.15
(6)UDP组
udpInDatagrams 1.3.6.1.2.1.7.1
udpNoPorts 1.3.6.1.2.1.7.2
udpInErrors 1.3.6.1.2.1.7.3
udpOutDatagrams 1.3.6.1.2.1.7.4
udpTable 1.3.6.1.2.1.7.5
udpEntry 1.3.6.1.2.1.7.5.1
udpLocalAddress 1.3.6.1.2.1.7.5.1.1
udpLocalPort 1.3.6.1.2.1.7.5.1.2
(7)SNMP组
snmpInPkts 1.3.6.1.2.1.11.1
snmpOutPkts 1.3.6.1.2.1.11.2
snmpInBadVersions 1.3.6.1.2.1.11.3
snmpInBadCommunityNames 1.3.6.1.2.1.11.4
snmpInBadCommunityUses 1.3.6.1.2.1.11.5
snmpInASNParseErrs 1.3.6.1.2.1.11.6
NOT USED 1.3.6.1.2.1.11.7
snmpInTooBigs 1.3.6.1.2.1.11.8
snmpInNoSuchNames 1.3.6.1.2.1.11.9
snmpInBadValues 1.3.6.1.2.1.11.10
snmpInReadOnlys 1.3.6.1.2.1.11.11
snmpInGenErrs 1.3.6.1.2.1.11.12
snmpInTotalReqVars 1.3.6.1.2.1.11.13
snmpInTotalSetVars 1.3.6.1.2.1.11.14
snmpInGetRequests 1.3.6.1.2.1.11.15
snmpInGetNexts 1.3.6.1.2.1.11.16
snmpInSetRequests 1.3.6.1.2.1.11.17
snmpInGetResponses 1.3.6.1.2.1.11.18
snmpInTraps 1.3.6.1.2.1.11.19
snmpOutTooBigs 1.3.6.1.2.1.11.20
snmpOutNoSuchNames 1.3.6.1.2.1.11.21
snmpOutBadValues 1.3.6.1.2.1.11.22
NOT USED 1.3.6.1.2.1.11.23
snmpOutGenErrs 1.3.6.1.2.1.11.24
snmpOutGetRequests 1.3.6.1.2.1.11.25
snmpOutGetNexts 1.3.6.1.2.1.11.26
snmpOutSetRequests 1.3.6.1.2.1.11.27
snmpOutGetResponses 1.3.6.1.2.1.11.28
snmpOutTraps 1.3.6.1.2.1.11.29
snmpEnableAuthenTraps 1.3.6.1.2.1.11.30
-----------------------------------
©著作权归作者所有:来自51CTO博客作者xpleaf的原创作品,请联系作者获取转载授权,否则将追究法律责任
linux snmp常用结点值
https://blog.51cto.com/xpleaf/1757162
附录 2《CentOS7系统中SNMP MIB信息访问》
因业务需要,需在Linux 操作系统下通过snmp指令对存储系统进行远程管理。
第一步:在存储系统设置snmp(各个厂家均不同,具体参考厂家指导手册);
第二步:从存储系统下载mib文件(存储厂商同有的其中一款存储的mib库文件为NETSTOR-RAID-MIB.txt);
第三步,就是在Linux系统的具体操作,内容如下:
1.查看操作系统的版本信息
[root@hash ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
2.安装net-snmp软件(假设已正常配置yum源)
[root@hash ~]# yum install *snmp* -y
3.将mib文件拷贝至/usr/share/snmp/mibs/
[root@hash ~]# cp NETSTOR-RAID-MIB.txt /usr/share/snmp/mibs/
4.在/usr/share/snmp/目录中增加配置文件snmp.conf,增加的内容为
mibs +mib文件名
[root@hash ~]# vim /usr/share/snmp/snmp.conf
mibs +NETSTOR-RAID-MIB
5.重启snmp服务,并设置为开机自启动
[root@hash ~]# systemctl restart snmpd
[root@hash ~]# systemctl enable snmpd
SNMP测试
本地测试:snmpwalk -v 2c -cpublic localhost 1.3.6.1.2.1.25.3.3.1.1
远程测试:snmpwalk -v 2c -c public 192.168.1.172 1.3.6.1.2.1.25.3.3.1.1
6.查看mib库的树形结构。如果不跟具体的产品信息(例如此处的toyouTech,见附录1的左边的名字),则会将系统中所有的mib文件的树形结构均显示出来。
[root@hash ~]# snmptranslate -IR -Tp toyouTech
[root@rdma59 SDS_Admin]# snmptranslate -IR -Tp sysDescr
+-- -R-- String sysDescr(1)
Textual Convention: DisplayString
Size: 0..255
[root@rdma59 SDS_Admin]# snmptranslate -IR -Tp tcpRtoAlgorithm
+-- -R-- EnumVal tcpRtoAlgorithm(1)
Values: other(1), constant(2), rsre(3), vanj(4), rfc2988(5)
7.运行snmpwalk测试是否真实生效。命令及选项的具体含义可参考man snmpwalk或 snmpwalk --help
[root@hash ~]# snmpwalk -v 2c -c public 192.168.168.132 .1.3.6.1.4.1.42347.2.1.3.3.1.2
NETSTOR-RAID-MIB::perfRAMTotal.1 = Counter32: 2098
原文链接:https://blog.csdn.net/QTM_Gitee/article/details/88066174
附录3 指令
snmpd -v
参考或摘抄文章列表
https://blog.csdn.net/sunrj_niu/article/details/124213758
https://blog.csdn.net/QTM_Gitee/article/details/88066174
linux snmp常用结点值 https://blog.51cto.com/xpleaf/1757162