搭建一个SNMP环境可以方便学习,也可直观的了解SNMP中各种实体及其行为,更加有效的学习。此处用net-snmp软件包搭建SNMP环境。
1 net-snmp简介
net-snmp是个开源的SNMP实现项目。支持SNMPv1、SNMPv2、SNMPv3,支持基于IPv4和IPv6的SNMP应用程序开发。
net-snmp包括以下内容:
l 完整的API用于SNMP应用程序开发(包括c和perl的API);
l 一个可扩展的SNMP代理程序(snmpd);开发者可开发动态模块扩展snmpd,net-snmp内置扩展子代理与主代理的通信协议;
l 提供众多命令行工具检查和使用SNMP协议;
l 一个trap接收进程,用于接收和显示trap。并可以将trap记录到日志文件里;
l 一个图形化的MIB浏览工具(tkmib:基于Tk/Perl的);
net-snmp被很多商业化linux包含,大多少的linux使用net-snmp的主代理实现Linux的SNMP支持。
2 安装与配置
net-snmp需要经过安装和配置两个主要步骤才可以使用。
2.1 操作系统
net-snmp可以在BSO UNIX、Linux、Windows等操作系统上编译使用。此处我们选择Linux操作系统。如果没有第二台机器装Linux,可以在Windows下安装一个VMWare(5.5以上版本),新建一个虚拟机,在虚拟机上安装Linux。
安装Linux时需要选择安装开发套件,否则编译net-snmp时会缺少编译和连接工具。
2.2 下载
net-snmp下载地址:http://www.net-snmp.org/download.html可以选择下载二进制文件或源码。源码需要自己编译,二进制只有Linux版本。
该处源码以net-snmp-5.2.2.tar为例。
2.3 解压
Su – root //切换到root用户,否则后面的编译和安装会有问题。
Tar –xvf net-snmp-5.2.2.tar //进入net-snmp源码目录后,执行该指令进行解压;
2.4 编译准备
编译之前需要进行编译准备,以生成编译所需的配置文件和Makefile,执行下列命令:
cd net-snmp-5.2.2
./configure
检查编译环境的最后会提示输入一些配置信息。一般取默认值即可(版本号笔者选择2)。net-snmp提供可扩展的代理,安装后运行在本机上,使本机成为一台被管理设备。最后配置检查程序会生成相关配置文件、编译及安装所需要的输入文件及相应的Makefile。
2.5 编译
make //使用编译准备步骤生成的Makefile,就可以编译net-snmp了。编译生成net-snmp的C语言开发库、SNMP工具、可扩展的主代理、开发工具。
2.6 安装
make install //
net-snmp编译完成后需要进行安装。默认安装情况下,安装后的文件和路径为:
1) 可扩展代理snmpd位于:/usr/local/share/ net-snmp
2) C语言开发库位于: /usr/local/share/ lib
3) C语言开发头文件位于:/usr/local/share/ include
4) net-snmp提供的SNMP工具位于: /usr/local/share/ net-snmp
5) net-snmp依赖的MIB文件位于:/usr/local/share/ net-snmp/mibs
6) net-snmp依赖的配置文件: /usr/local/share/ net-snmp/conf/etc/snmp
2.7 配置文件
需要为我们的测试环境配置一个学习用的配置文件。
Vi /etc/snmp/snmpd.conf //进入编辑net-snmp的配置文件;
2.8 验证
安装完成后需要验证是否可以正常工作。
1) Snmpd //启动代理。验证主代理是否可以正常启动;
也可以加入参数使snmpd使用指定配置文件启动:
Snmpd -C –c /etc/snmp/snmpd.conf //该方式,我们可以配置很多不同的配置文件,设置不同的运行环境,便于学习和开发。
2) Ps -aef | grep snmpd //检查代理是否已启动。(代理是守护进行,执行后会到后台运行)
3) 从代理中读取一个管理对象验证代理是否正常运行。
Snmpget -v2c –c public localhost sysDescr.o //读取MIB-II表中的sysDescr对象,该对象表示设备的描述信息。执行该命令后应该得到类似以下的结果:SNMPv2-MIV::sysDescr.0=STRING:linux leelin.leelindomain 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686
3 工具使用介绍
net-snmp提供了许多工具使用和调试SNMP,下面简单说明。具体参数请参见相应工具的Man page。方法: man <command>,例如:man snmpget
序列 |
command |
说明 |
1) |
Snmpget |
模拟SNMP的GetRequest操作的工具。用来获取一个或几个管理信息。用来读取管理信息内容。 |
2) |
snmpgetnext |
模拟SNMP的GetNextRequest操作的工具。用来获取一个管理信息实例的下一个可用实例数据。一般用来遍历SNMP中的表格数据。 |
3) |
Snmpset |
模拟SNMP的SetRequest操作的工具。用来设置可以写的管理信息。一般用来配置设备或对设备进行操作。 |
4) |
Snmpbulkget |
模拟SNMP的GetBulkRequest操作的工具。用来读取大块的数据。一般在大量读取大块数据时使用以提高带宽利用率,并且比使用Snmpget、snmpgetnext、Snmpwalk有更强的容错能力,代理会返回尽可能多的数据,比其它命令更有保证。 |
5) |
Snmpwalk |
利用给定的GetNextRequest对给定的管理树进行遍历的工具。一般用来对表格类型管理信息进行遍历。 |
6) |
Snmptrap |
模拟发送trap的工具。 |
7) |
snmptrapd |
接收并显示trap的工具。一般用在代理的开发过程中,接收代理发来的trap,并将PDU细节打印出来,用来测试trap发送功能是否正常。 |
8) |
Snmpinform |
模拟发送InformRequest的工具。用来发送模拟的带应答的trap,以测试管理站或自己开发的接收程序。 |
9) |
Snmptable |
使用GetNextRequest和GetBulkRequest操作读取表信息,以列表形式显示的工具。 |
10) |
Snmpstatus |
从SNMP实体中读取几个重要的管理信息以确定设备状态的工具。用来简单测试设备状态。 |
11) |
Snmpbulkwalk |
利用GetBulkRequest实现对给定管理树进行遍历的工具。对表格类型管理信息进行遍历读取。 |
12) |
snmpdelta |
用来监视Interger类型的管理对象,会及时报告值改变情况的工具。用于检测一个设备或开发中的代理。 |
13) |
Snmptest |
是一个复杂的工具,可以检测和管理一个网络实体的信息,通过SNMP请求操作与管理实体通信。 |
14) |
Snmptranslate |
将对象名称和标识符相互转化的工具。用于数据格式的对象标识符和可读式字符串的数据名称的转换。类似于域名和Ip地址的关系。 |
15) |
Snmpusm |
SNMPv3 USM配置工具。用于SNMPv3的用户管理。 |
16) |
Snmpvacm |
为一个网络实体创建或维护SNMPv3的基于视图访问控制参数的工具。用于维护SNMPv3的视图访问控制。 |
17) |
Snmpconf |
生成snmpd配置文件的工具。用于生成snmpd的各种配置文件,用作模板,以生成用户级配置文件。 |
18) |
Snmpd |
net-snmp开发的主代理程序,包括众多标准MIB的实现,还可以使用子代理对其进行扩展,是一个功能强大的SNMP代理。Linux、UNIX和Windows系统运行snmpd后,直接具备了SNMP协议支持,可以被管理站管理。许多商业化的Linux中使用snmpd作为系统的SNMP代理。 |
19) |
Snmpdf |
通过SNMP访问并显示网络实体磁盘利用情况的工具。用来检测网络实体的磁盘。 |
4 总结
net-snmp是一个使用广泛的开源SNMP实现。它支持SNMP全功能版本,并且提供丰富的工具,可以用于调试和管理。同时,net-snmp提供代理开发API。