最近项目中用到了snmp4j包进行设备拓扑,设备性能监控,本文主要讲解一下SNMP,snmp4j包在Java中的使用。

一、SNMP介绍

SNMP是简单网络管理协议,专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。目前, SNMP 有 3 种: SNMPV1 、 SNMPV2 、 SNMPV3。第 1 版和第 2 版没有太大差距,但 SNMPV2 是增强版本,包含了其它协议操作。与前两种相比, SNMPV3 则包含更多安全和远程配置。

1、基本操作类型

SNMP对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap。Get:管理站读取代理者处对象的值。它是SNMP协议中使用率最高的一个命令,因为该命令是从网络设备中获得管理信息的基本方式。Set:管理站设置代理者处对象的值。Trap: 代理者主动向管理站通报重要事件。Trap 消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息,管理站可相应地作出处理。

2、snmp消息组成

一条snmp消息由版本识别符、团体名、PDU组成。版本识别符用于说明现在使用的是哪个版本的SNMP协议,确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。团体名是基本的安全机制,用于实现SNMP网络管理员访问SNMP管理代理时的身份验证。PDU (协议数据单元)是SNMP消息中的数据区, 即Snmp通信时报文数据的载体。PDU指明了SNMP的消息类型及其相关参数。

3、MIB(信息管理库)

上文提到了MIB对象,MIB是信息管理库,可以理解成为agent维护的管理对象数据库, MIB数据对象以一种树状分层结构进行组织,这个树状结构中的每个分支都有一个专用的名字和一个数字形式的标识符,可以通过其数字标识符来查找MIB中的数据对象,这个数字标识符号从结构树的顶部(或根部)开始,直到各个叶 子节点(即数据对象)为止。

4、OID

每个管理对象都有自己的OID(Object Identifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,也就是从根节点 通向它的路径,整数之间用点( . )分隔开,树的叶子节点才是真正能够被管理的对象。

二、Java实现SNMP

1、搭建环境

首先本地计算机和被管理的设备要开启snmp,然后下载snmp4j包,或者在maven项目pom文件添加依赖。

请点击输入图片描述(最多18字)

2、代码实现

1)、初始化snmp,并开启监听

2)、初始化目标对象信息,snmp的get和set方式默认端口都是161,发送和接收trap消息端口默认是162。

3)、创建报文

4)、发送并接收返回处理消息。

get方式获取信息:

set配置设备参数

接收trap消息

实际SNMP报文类型还有getBulk,getNext等类型,有兴趣的小伙伴可以自己尝试一下。还有一款MIB Browser(MIB浏览器)是SNMP开发中必备一种工具,有时间再讲一下它的安装和使用。