现在的位置: 首页 > 综合 > 正文

在Windows环境下编译NET-SNMP的具体实现步骤

2013年06月19日 ⁄ 综合 ⁄ 共 3306字 ⁄ 字号 评论关闭

一、准备工作
  1、安装Microsoft Visual Studio 2005,其中Visual C++为必选组件
  2、安装Active Perl解析器至C:/usr目录下
    该步骤必须执行,否则在后期执行配置操作时,会提示没有安装perl解析器的错误,从而无法自动配置。

二、编译NET-SNMP源文件(基于readme.win32中的Microsoft Visual C++ - Workspace - Building部分)

  1、配置默认安装路径,打开net-snmp-5.4/win32/net-snmp/net-snmp-config.h,将第8行改为#define INSTALL_BASE "C:/usr"
    在net-snmp-config.h文件中,所有的路径都是使用UNIX下的/符号,如果将其改为Windows下的/符号的话,反而会在后期配置时出现路径错误。

  2、在Visual Studio 2005中打开net-snmp-5.4/win32/win32.dsw,点击“全部都是”转换工作空间。

  3、单击菜单栏的“生成”下的“配置管理器”,将活动解决方案配置从Debug改成release。此处也可以不修改,但是在后面的安装过程中,需要加入“-debug”参数。(后续内容以不修改为例)。

  4、在右侧解决方案资源管理器中,依次对libagent、libhelpers、libnetsnmptrapd、libsnmp、netsnmpmibs这五个项目单击鼠标右键,选择“重新生成”。

  5、单击菜单栏的“生成”下的“生成解决方案”。

  6、单击菜单栏的“生成”下的“配置管理器”,在“项目上下文中”去掉对libagent、libhelpers、libnetsnmptrapd、libsnmp、netsnmpmibs这五个项目的选择,其余不变。

  7、单击菜单栏的“生成”下的“重新生成”。

  8、编译结束之后,单击菜单栏的“文件”下的“关闭解决方案”,退出。

三、安装NET-SNMP(基于readme.win32中的Microsoft Visual C++ - Workspace - Installing部分)
  1、打开net-snmp-5.4/win32/install-net-snmp.bat,检查第12行是否为set INSTALL_BASE="c:/usr",不是的话请改成这个。

  2、打开命令提示符窗口,进入net-snmp-5.4/win32目录下,运行 install-net-snmp.bat -debug 安装。
    如果编译的时候将活动解决方案配置改成了release的话,直接运行install-net-snmp.bat即可。
  3、拷贝net-snmp-5.4/win32/local/*.bat文件至C:/usr/bin目录下。
    该步骤本应该在执行批处理的时候自动执行,但实际上这些文件并没有被拷贝过去,所以我们必须手动进行,否则无法配置。

四、检查文件是否完整,在C:/usr/bin目录下应该存在下列22个文件
mib2c.bat、snmpconf.bat、traptoemail.bat、snmpconf、snmpbulkget.exe、snmpbulkwalk.exe、snmpd.exe、snmpdelta.exe、snmpdf.exe、snmpget.exe、snmpgetnext.exe、snmpnetstat.exe、snmpset.exe、snmpstatus.exe、snmptable.exe、snmptest.exe、snmptranslate.exe、snmptrap.exe、snmptrapd.exe、snmpusm.exe、snmpvacm.exe、snmpwalk.exe

五、配置NET-SNMP(基于readme.win32中的Configuring Net-SNMP部分)

  1、打开C:/usr/bin/snmpconf.bat,检查第2行是否为set MYPERLPROGRAM=c:/usr/bin/snmpconf,不是的话请改成这个。

  2、打开C:/usr/bin/snmpconf,查找所有/usr/local/并替换为C:/usr/
    该步骤必须执行,snmpconf中的文件路径采用的是UNIX下的/usr/local/,这里必须改为Windows下的C:/usr/,但/符号仍然保持UNIX下的/符号,不用改成windows下的/符号,否则运行时会提示无法创建路径。

  3、运行 snmpconf -i

  4、选择 3: snmp.conf

  5、选择 3: Textual mib parsing

  6、选择 1: Specifies directories to be searched for mibs.

  7、输入 c:/usr/share/snmp/mibs

  8、输入 finished回车 finished回车 quit回车,正常退出。

  9、将C:/usr/share/snmp目录下的snmp.conf拷贝至C:/usr/etc/snmp目录。

  10、拷贝net-snmp-5.4/win32/EXAMPLE.conf.win32C:/usr/etc/snmp目录下,并改名snmpd.conf

  11、打开刚刚拷贝的snmpd.conf,将第70行改为com2sec local    localhost      public
    原文件中71行的COMMUNITY部分必须被改成public,COMMUNINTY只是个例子,不修改的话后期无法正常执行。

  12、删除或者注释掉第71
    理由与上一条相同,NETWORK/24也只是个例子。

六、运行NET-SNMP

  1、打开一个命令提示符窗口,运行 snmpd -f -Le -d

  2、提示如下则正确运行:
    NET-SNMP version 5.4
  3、新开一个命令行窗口,运行 snmpget -c public -v 2c localhost system.sysUpTime.0

  4、当前窗口提示如下:
    SNMPv2-MIB::sysUpTime.0 = Timeticks: (8279) 0:01:22.79

  5、原命令行窗口提示如下:
    Received 41 bytes from 127.0.0.1 76
    0000: 30 27 02 01 01 04 06 70 75 62 6C 69 63 A0 1A 02    0'.....public... SMM)
    0016: 02 0F BC 02 01 00 02 01 00 30 0E 30 0C 06 08 2B    .........0.0...+
    0032: 06 01 02 01 01 03 00 05 00                  .........
    Received SNMP packet(s) from 127.0.0.1
     GET message
          -- SNMPv2-MIB::sysUpTime.0
    Sending 43 bytes to 127.0.0.1
    0000: 30 29 02 01 01 04 06 70 75 62 6C 69 63 A2 1C 02    0).....public...
    0016: 02 0F BC 02 01 00 02 01 00 30 10 30 0E 06 08 2B    .........0.0...
    0032: 06 01 02 01 01 03 00 43 02 20 57              .......

七、出错情况

参考http://www.diybl.com/course/webjsh/osgl/20071226/93877.html

1 通过命令行窗口运行snmpd -f -Le -d,提示信息:
       Error opening specified endpoint ""
       Server Exiting with code 1
      解决:windows系统的snmp服务需要关闭,因为UDP端口已经被占用。代理默认的端口都是162,也可以通过配置进行修改。

抱歉!评论已关闭.