Windows下Mib2c工具的安装和使用

来源:互联网 发布:公路计算软件 编辑:程序博客网 时间:2024/06/04 18:45

     

一 编译net-snmp5.5源码,安装及测试net-snmp-5.5.0-1.x86.exe。可以参考“Net-Snmp 使用介绍 .doc”;

 

二.安装mib2c工具

使用mib2c时先安装perl  module。

         1.解压安装ActivePerl-5.8.8.822-MSWin32-x86-280952.zip。默认安装就行;安装成功后,在命令行输入perl命令,就不收到命令错误的提示;

 

2.将netsnmp.lib的路径加到环境变量中,否则运行下边命令时会提示netsnmp.lib找不到,具体方法(我的电脑->属性->高级->环境变量,对lib编辑,在他的值中加入netsnmp.lib 所在的目录(net-snmp源码中的\win32\lib\debug目录),我的是E:\net-snmp-5.5\net-snmp-5.5\win32\lib\debug , 注意:多个目录用.;间隔)

 

进入net-snmp源文件的perl目录下,运行以下命令:

 

(1)perl makefile.pl

之后会提示输入mibs目录和snmpd.exe所在的目录,分别输入C:\usr\share\snmp\mibs和C:\bin

如果成功,会生成makefile文件

(2)nmake   

Nmake是vc带的命令,(在vc安装文件夹下有nmake.exe);如果没有该命令,从新装vc 6.0;

(3)nmake install

之后就安装perl  module成功了;

注意:有时候运行nmake会失败,把其它机器上安装好的c:\perl\site\lib目录下的文件拷贝过来,也可以运行。

成功的话,现在mib2c工具应该就可以用了;

 

三 。用mib2c生成模板源代码

 

编写自己的mib文件,并将其放到 C:\usr\share\snmp\mibs目录下;

 

从CMD中进入C:\usr\share\snmp目录

 

  运行以下命令:

     1)set MIBFILES=C:\usr\share\snmp\mibs\PROBA-MIB.txt   将新的mib文件(我的是PROBA-MIB.txt)加入环境变量,否则执行下一步时会报错;

       2 )mib2c -c mib2c.scalar.conf  baseinfo  

baseinfo 是我的mib文件中定义的一个节点;

 

       会按照模板配置文件mib2c.scalar.conf生成baseinfo.h和baseinfo.c文件(在C:\usr\share\snmp目录下);

 

注意:待转换的节点如果不是顶层叶子节点的话,上一步命令可能会出错;提示出现perl.exe的错误提示框;并且显示perl脚本文件mib2c出现错误,line 845;

解决办法:

 

打开C:\usr\bin下的mib2c文件,将845 846 847 行的代码屏蔽掉:

# @thekeys = sort {

#           new NetSNMP::OID($a) <=>

#  new NetSNMP::OID($b) } @thekeys;

在执行mib2c转换命令就行了;

 

四 将生成的.c和.h  文件编译进net-snmp工程;

 

1)把baseinfo.h和baseinfo.c文件拷贝到net-snmp源文件下agent/mibgroup目录下;

 

2)打开win32.dsw,将其添加到netsnmpmibs工程;

 

3)打开net-snmp源文件下win32目录下的mib_module_incl?s.h,添加:

 

#incl? "mibgroup/proba/baseinfo.h"

 

4)打开net-snmp源文件下win32目录下的mib_module_inits.h,添加:

 

                if (should_init("baseinfo")) init_baseinfo();

 

5)重新编译netsnmpmibs工程和snmpd工程,把生成的snmpd.exe拷贝到c:\usr\bin,

 

注意:

生成的.c和.h文件中有许多让用户自己修改的地方;如:其中部分代码

     snmp_set_var_typed_val(reqsts->reqstvb, ASN_OCTET_STR,

 

                                     (u_char *) /* XXX: a pointer to the scalar's data */,

 

                                    /* XXX: the length of the data in bytes */);

为了简单的验证可以改成:

snmp_set_var_typed_val(reqsts->reqstvb, ASN_OCTET_STR,

 

                                     (u_char *)"proba",

 

                                   strlen("proba"));

把生成的snmpd.exe拷贝到c:\usr\bin之后,就可以测试新建的节点了;

snmpget -v 2c -c p lic -m all p:localhost:161 probaCmopName.0    (probaCompName是baseinfo节点下的子节点);

就能查到刚才新建的节点的信息了;


 

0 0
原创粉丝点击