一.安装及配置SNMP(win32环境)
1.下载
从www.sourceforge.net下载到最新的net-snmp(目前最新版本 5.4.1 )net-snmp-5.4.1.zip
2.解压编译
解压后,可以看到有一个win32目录,里面存放的是和win32环境相关的文件,有3个dsw:
libsdll.dsw 编译lib文件和dll文件的工程
win32.dsw 编译lib文件和工具文件如snmpget,snmpset的工程
win32sdk.dsw 类似于win32.dsw,区别在于:需要安装Platform SDK。如果需要agent能支持 interfaces等一些高级功能,必须用此工程编译。XPSP2 Platform SDK的下载地址
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
只需要安装Core SDK就可以了,安装完后需要从开始菜单中Register一下。
注意编译的顺序,最好先编译libsdll.dsw,把netsnmp.lib,netsnmpagent.lib,netsnmphelpers.lib,netsnmpmibs.lib,netsnmptrapd.lib文件先编译好,再编译win32sdk.dsw中的项目。
3.安装
运行win32目录下的install-net-snmp.bat批处理文件,会把上一步编译生成的文件及相关的头文件等拷贝到c:/usr目录。
4.配置
在c:/usr/etc/snmp目录添加配置文件snmpd.conf,添加如下内容:
rocommunity public
rwcommunity private
它表示的含义是,启动agent服务后,通过public共同体是只读的,private共同体可读也可写。
在命令行运行如下命令,将snmp注册为windows的服务:
cmd>”C:/usr/bin/snmpd.exe” –register -Lf "C:/usr/log/snmpd.log"
注册成功后可以在【控制面板】->【管理工具】->【服务】中看到刚注册的服务,服务名是:net-snmp agent
5.运行
cmd>net start “net-snmp agent”
如果正常,会得到启动服务成功的提示
6.验证
cmd>snmpget –v 2c –c public localhost 1.3.6 .1.2.1.1.5.0
cmd> snmpset -v 2c -c private localhost sysContact.0 = piyeyong
如果正常,会的到取得和设置成功的提示,出错会给出错误提示。
二.MIB文件编写
MIB文件会存放于C:/usr/share/snmp/mibs/目录下,是*.txt,纯文本文件,可以直接打开查看和更改。RFC1213中定义的MIB节点信息的定义存放与RFC1213-MIB.txt,这些节点是比较重要的,会经常用到。
如果要扩展MIB,应该定义在 1.3.6 .1.4.1(.iso.org.dod.internet.private.enterprises)子树下。自定义MIB的节点,只需要描述该节点的SYNTAX,ACCESS,STATUS,DESCRIPTION等属性及它属于父节点的第几个子节点即可。如下所示,为扩展MIB的一个简单例子:
PROBA-MIB DEFINITIONS::=BEGIN
IMPORTS
enterprises,OBJECT-TYPE,Integer32,TimeTicks
FROM SNMPv2-SMI
TEXTUAL-CONVENTION, DisplayString FROM SNMPv2-TC;
-- proba node
proba OBJECT IDENTIFIER::={enterprises 8888}
baseinfo OBJECT IDENTIFIER ::= { proba 1 }
-- company name
probaCompName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
DESCRIPTION "The Name of company"
::={baseinfo 1}
-- company location
probaLocation OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
DESCRIPTION "The Location of company"
::={baseinfo 2}
-- employee number
probaEmployeeNumber OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION "The number of employee"
::={baseinfo 3}
END
三.Agent端开发
在上一步中定义好MIB的结构后,现在就开始编码实现定义好的节点。net-snmp提供了一个MIB 2C 工具,利用它可以根据MIB的定义和配置文件自动生成*.c和*.h模板文件,然后只需要在相应位置添加对节点数据的处理就可以了。
1.配置net-snmp的perl模块
用使用mib 2c 工具,需要perl模块的支持,可以从http://www.ActiveState.com/ActivePerl下载,目前最新版是 5.8.8
在net-snmp源文件的perl目录下,运行以下命令:
cmd>perl makefile.pl
如果成功,会生成makefile文件
cmd>nmake
cmd>nmake install
这时,会将net-snmp相关的perl模块编译好并安装到c:/perl/site/lib目录下。
注:有时候运行nmake会失败,把其它机器上安装好的c:/perl/site/lib目录下的文件拷贝过来,也可以运行。
2.用mib 2c 生成模板源代码
运行以下命令:
cmd>mib 2c -c mib 2c .scalar.conf baseinfo
会按照模板配置文件mib 2c .scalar.conf生成baseinfo.h和baseinfo.c文件。注意:baseinfo是上一步在MIB中定义的proba下的一个节点。在baseinfo.c中有很多/* XXX 注释*/的地方,这些地方是需要我们修改,填上我们对节点数据的处理代码。