最近有个机房监控的小项目,甲方要求增加对核心交换机进行基本的网络状态监控,于是抽时间研究了一下SNMP协议。由于不是做专业网管系统,所以研究不深,再此仅对之前的调研做个总结,以供新人参考。
首先明确几个概念:
关于如何SNMP协议的介绍、组成、工作方式、协议版本等大家尽可通过搜索获取,再此不累述。简单来讲,SNMP是基于ip网络一种标准协议,用来对ip网络中所有节点设备进行监测和管理。如果要使用SNMP,需要了解以下几点:
1.SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。
在监控主机上工作的是客户端(也叫管理站),在被监控设备上工作的是服务端(也叫代理agent)。
2.SNMP目前有3个版本,v1、v2、v3。
三个版本在功能上没有太大的区别,最大的不同就是对安全认证的要求不同,v1的安全级别最低,在进行通信连接的时候仅需提供类似明文密码的community(社区名)即可;v2在社区名的基础上还要求提供指定的用户名;v3的安全性最高,在连接时必须提供用户名和两组不同算法加密的密码,主加密算法可选MD5和SHA-1,次加密算法为DES。
MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的叶子节点来获取网络设备的运行状态。叶子节点有2种:变量节点和表节点。
变量节点,即此叶子节点代表一个变量,通过SNMP可以获取该变量的值;表节点,即通过SNMP可以获取一个二维的表结构。
按照IETF的规定,MIB分为公有和私有。公有MIB要求各网络设备厂商的各型号产品必须支持,除此之外,由于设备种类的千差万别,为了弥补公有MIB信息量少的不足,各厂家可以自行定义和编译私有的MIB。
不论公有的还是私有的MIB,每个叶子节点都由与之相对应的对象识别符(OID)进行标识,并且,对于公有MIB,其对象识别符是唯一的。
MG-SOFT MibBrowser是一组MIB开发的集成环境,包括MibBrowser、MibBuilder、MibCompiler、MibExplorer。我们常用的是MibBrowser,它可以连接指定ip的网络设备,并通过snmp协议获取指定MIB的OID值,支持v1、v2、v3版本。此软件为商业软件,有30天的试用期,到期后需要购买license。
Remote SNMP Agent中填写要监控的网络设备ip,点击右侧的配置按钮。出现如下对话框。
首先选择snmp版本。若使用SNMPv1,则输入Read community和Set community。前者是读权限的社区名(相当于密码),默认为public,可根据网络设备中的设置相应修改。后者是写权限的社区名,默认为private,如果没有更改OID值得需求,可不做修改。
若使用SNMPv3,点击Add User,在下面对话框中输入用户档案名(User profile name),安全用户名(Security user name),选择MD5认证算法(Authentication protocol)和密码,选择DES私有算法(Privacy protocol)和密码。
以上v3的配置信息对照飞鱼星路由器的SNMP代理进行设置。
设置完成后,点击ok即可连接至网络设备的SNMP代理,在左侧MIB树中的任意节点右键->walk,即可获得该节点下的所有OID信息,如下图所示。
当然,也可以在菜单中选择SNMP->Prompt For OID打开如下对话框,通过输入指定的OID来获取(Get)其对应的值。
MIB Browser是一款很小巧的MIB浏览器,强大、易用的网络管理和分析工具。它可以加载SNMP的MIB文件并快速进行解析。
通过导入MIB文件来查看该MIB的结构和每个页节点的OID及相应的说明。上图显示的是公有MIB的结构说明。
ManageEngine_MibBrowser_FreeTool
iReasoning MIB browser setup
在Windows 2000以上版本中,Microsoft已经封装了SNMP协议的实现,提供一套可供在Windows下开发基于SNMP的网络管理程序的接口,这就是WinSNMP API。总的来说,WinSNMP以函数的形式封装了SNMP协议的各部分(在VC++6.0开发环中体现为wsnmp32.dll、wsnmp32.lib和winsnmp.h),且针对SNMP是使用UDP的特点而设置了消息重传、超时机制等。
不足之处,是微软的API只支持SNMPv1和SNMPv2,不支持SNMPv3。而且该API的使用较为复杂,不适合新手快速应用。
同为MG-SOFT公司的SNMP产品,功能强大,支持SNMPv1、SNMPv2和SNMPv3,有多平台的版本Windows、Linux、Mac、Solaris。商用软件,有30天的试用期,到期后需要购买license。
SNMP++是一套C++类的集合,它为网络管理应用的开发者提供了SNMP服务。SNMP++通过提供强大灵活的功能,降低管理和执行的复杂性,把面向对象的优点带到了网络编程中。另外,Snmp++完全开源免费,编程人员可以根据自己的需求和喜好移植和扩充SNMP++。
特性:
l 支持跨平台,可方便的移植到windows、linux、unix、mac os等系统;
l 支持v1、v2、v3版本的SNMP协议;
l 支持阻塞和非阻塞通信模式;
l 支持多线程,且是线程安全的;
l 具有自动超时和重发机制;
l 内存自动管理和面向对象;
l 完全支持SNMP的Get, Get Next, Get Bulk, Set, Inform和Trap操作;
l 开源免费。
SNMP++的最新版本为v3.3,可以从http://www.agentpp.com/上免费下载源代码和sample。若需要支持snmpv3,则需要下载LibDes。若使用VC++进行开发,可以下载MS VC++ 7.0的工程文件。
snmp++v3.3.0.tar.tar
libdes-l-4.01a.tar.tar
msvc7.zip