Snmp++简介

日期:2014-07-04点击次数:9656

       SNMP(Simple Network Management Protocol),简单网络管理协议。SNMP是目前最为常用的网络管理协议。现在,几乎所有的网络设备生产厂家都实现了对SNMP的支持。SNMP是一个从网络上的设备收集管理信息的公用通信协议。
       snmp++是一套C++的类,为网络管理的应用提供了SNMP服务。Snmp++具有简单、易用、安全、可移植等优点,从而开发者并不需要去了解snmp,只需要调用相关的对象或者接口即可完成snmp的通讯。
       Snmp++主要类介绍:
       Oid Class(Object Id Class)对象标识符类,类似于CString或者std:string,用于封装OID。
       Address Class ,封装关于地址的操作,地址确认等信息的确认在类的内部自动完成,这样开发应用的程序员可以专注于解决实际问题。目前的Address class由4个子类组成:IpAddress Class, IpxAddress Class, MacAddress class和GenAddress class。
       Variable Binding ( Vb) class 是SNMP“绑定变量”的封装,一个Vb对象含有一个Oid对象及其SMI的value。
       Pdu Class SNMP++的Pdu class是SMI Protocol Data Unit (PDU)的C++封装。PDU是管理端和代理端进行SNMP通讯的基本概念。通过Pdu class,SNMP++使得对PDU的操作变得简单、安全。Pdu class允许简单的构造、析构,以及在Pdu对象上加载、卸载Vb对象。
       Target Class每个target都与一个地址对象(Address object)相关联。该地址是一个GenAddress,因此可以处理所有SNMP++地址(IP, IPX或其他)。为指明被管理的代理端地址并与一个Target相关联,只需要简单地通过构造函数的参数或成员函数就可实现
       Snmp class是SNMP++中最为重要的类。Snmp class封装了SNMP的会话。通过处理与指定代理端的会话,SNMP++实现了对网络管理应用的逻辑绑定。
       然而官网上提供的只是snmp++的相关类的集合,那么就需要将这些类编译成库来使用,下面介绍在VS2010下编译snmp++的步骤。
       在官网http://www.agentpp.com下载SNMP++v3.2.25。VS2010创建静态库工程,如下图 




       解压SNMP++v3.2.25,将解压出来的snmp++v3.2.25\snmp++\src目录下的所有.cpp文件添加至工程的源文件中。将snmp++v3.2.25\snmp++\include添加至头文件的包含目录中。
       编译工程,此时会有错误提示:找不到des.h。这是因为此处依赖于des.h文件,此文件在官网中的libdes-l-4.01a包中。下载libdes-l-4.01a,将des.h所在目录添加至头文件包含目录中,编译成功。编译得到MySnmpLib.lib。
       此处虽然编译出了静态库,但是编译时依赖了des.h文件,所以需要以上述编译MySnmpLib.lib的方法编译出libdes-l-4.01a中的类对应的静态库libdes.lib。
       建立测试Demo,创建控制台应用程序MyTest,将ws2_32.lib、MySnmpLib.lib、libdes.lib配置为链接输入项即可(其中MySnmpLib.lib、libdes.lib是之前生成的,ws2_32.lib是系统库),测试类需要引用头文件 "snmp_pp/snmp_pp.h"。
      主要代码如下:
Snmp::socket_startup();
UdpAddress address("127.0.0.1"); 
address.set_port(161);
CTarget *ctarget1 = new CTarget(address);
ctarget1->set_readcommunity("public");
ctarget1->set_version(version1);
Snmp *snmp1 = new Snmp(status1);  
Vb vb1("1.3.6.1.4.1.2254.2.4.1.5.0"); 
//vb1.set_value("dupsIdentName123"); 
Pdu pdu1;    // SNMP++ PDU
pdu1 += vb1;
status1 = snmp1->get( pdu1, *ctarget1);
//status1 = snmp1->set(pdu1, *ctarget1);


 

软件部   刘彦鑫

姓名:
性别:
电话:
E-mail
问题:
问题描述: