SNMP_PP_CHS Charpter 1 - 2

C++构建的,处理简单网罗管理协议(SNMP) API

 

这是篇描述SNMP++的文档。面向对象的SNMP++是一套专注于网络管理的开放技术,是SNMP协议原理和C++(结合的产物)。该文档描述了各种各样可移植的C++类(Class),正是这些C++类构建了SNMP++。(同时包含的)还有这些类的相关的许多例子。

(您可以)登录http://rosegarden.external.hp.com/snmp++,下载SNMP++的源码,和一些正在实际中使用的例子,以及其他相关文档。

1.         介绍

(目前)有许多可以创建网络管理应用的SNMPAPI。大多数API都提供了一个很大的函数库,(调用)这些函数的程序员需要熟悉SNMP内部的工作原理和它的资源管理(机制)。这些API大多都是平台相关的,导致了SNMP的代码成了操作系统相关的或者网络系统平台有关的,难以移植。(另一方面)由于C++有丰富的、可复用的标准类库,用C++开发应用成了目前的主流,(然而)C++标准类库所缺少的正是一套封装好的处理网络管理的类。(如果)基于面向对象的方法来进行SNMP网络编程,可以提供诸多好处:易用、安全、可移植、能扩展。(因此)SNMP++灵活有效的解决了其他类似API执行和管理起来都很痛苦的问题。

1.1.        什么是SNMP++

SNMP++是一套C++类的集合,它为网络管理应用的开发者提供了SNMP服务。SNMP++并非是现有的SNMP引擎的扩充或者封装。(事实上)为了效率和方便移植,它只用到了现有的SNMP库里面极少的一部分。SNMP++也不是要取代其他已有的SNMP API,比如WinSNMPSNMP++(只是)通过提供强大灵活的功能,降低管理和执行的复杂性,把面向对象的优点带到了网络编程中。

1.2.        SNMP++的本质

1.2.1.       简单易用的SNMP++

面向对象的SNMP编程应该是简单易用的。毕竟,SNMP原意就是简单网络管理协议SNMP++(只是)将简单还给SNMP!应用的开发者不需要关心SNMP的底层实现机制,因为面向对象的方法已经将SNMP内部机制封装、并隐藏好了。SNMP++的简单易用表现在以下方面:

1.2.1.1.       SNMP提供了简单易用的接口

使用SNMP++不需要精通SNMP,甚至不需要精通C++!因为SNMP++里面几乎没有C的指针,所以可以简单的通过API直接使用。

1.2.1.2.       可以方便的迁移至SNMPv2

SNMP++的主要目标之一就是开发一套API,(使得)迁移至SNMPv2(的过程中)尽可能少地影响现有代码。SnmpTarget class(译注:后面将要讲到)使之成为了可能。

1.2.1.3.       保留了对SNMP灵活的底层开发

这是为了方便那些不希望使用面向对象方法,而直接编写SNMP的底层机制的用户。虽然SNMP++快速而方便,但是有些时候程序员也许希望直接使用底层的SNMP API

1.2.1.4.       鼓励程序员用功能强大的C++,不要因学得不够快而去指责它

使用SNMP++的用户不需要精通C++。基本的SNMP的知识是必要的,但是实际上也需要对C++初步的理解。

1.2.2.       编程安全的SNMP++

大多数SNMP API需要程序员去管理大量的资源。不恰当的装载或卸载这些资源,会导致内存崩溃或泄漏。SNMP++提供的安全机制,(可以)实现对这些资源的自动管理。SNMP++的用户(可以)体验到自动管理资源与对话所带来的好处。SNMP++在编程上的安全突出表现在下面的领域:

1.2.2.1.       SNMP资源提供安全的管理

这包括对SNMP的结构、会话以及传输层的管理。SNMP class被设计成所谓的抽象数据类型(ADTs),隐藏了私有数据,而通过提供公有的成员函数来访问或修改这些隐藏了的实例变量。

1.2.2.2.       提供查错、自动超时重发的机制

SNMP++的用户不需要关心如何为不可靠的网络传输机制提供可靠性。可能出现的通信错误包括:数据包丢失、数据包重复以及反复提取数据包。SNMP++消除了所有这些问题出现的可能性,为用户提供了传输层的可靠性。

 

1.2.3.       可移植的SNMP++

SNMP++的主要目的之一就是提供一套可移植的API,进而穿越各种操作系统(Oss)、网络系统(NOSs)以及网络管理平台。由于SNMP++隐藏了内部机制,所以从各个平台的(角度)来看SNMP++的公用接口都是都是一样的。使用SNMP++的程序员不需要为平台迁移去修改代码。另一个移植方面的问题是在多种协议上运行的能力。(对此)SNMP++现在能运行在IP协议和IPX协议上,或者两者都可以。

1.1.1.       可扩充的SNMP++

扩充不(应该)只是多一种选择,而是更深层次的。SNMP++不仅是可扩充,而且是很容易扩充。SNMP++的扩充囊括了对下列领域的支持:新的操作系统、网络系统、网络管理平台、网络协议、SNMPv2及其新特性。通过派生C++的类,SNMP++的用户可以根据自己的喜好继承、重载。

1.1.1.1.       重载SNMP++的基础类

应用的开发者可以通过派生出SNNP++的子类来提供所需的操作和属性,这正是面向对象的核心主题。SNMP++的基础类被打造成通用的,而没有包含任何具体的数据结构和操作。通过C++派生类以及重新定义虚函数,可以很容易的添加新属性。

 

2.         一个介绍性的例子

在开始介绍SNMP++的各种特性之前,这里先举个简单的例子来展现它的强大和简单。这个例子是从指定的代理端上获取SNMP MIB的系统描述符(System Descriptor object)。包含了创建一个SNMP++会话、获取系统描述符,并打印显示出来的所需的所有代码。(其中)重发和超时机制已经被SNMP++自动管理了。(以下)属于SNMP++的代码,采用粗体显示。

2.1.        一个简单的SNMP++例子

#include “snmp_pp.h”

#define SYSDESCR “1.3.6.1.2.1.1.1.0”            // Object ID for System Descriptor

void get_system_descriptor()

{

   int status;                                        // return status      

   CTarget ctarget( (IpAddress) “10.4.8.5”);       // SNMP++ community target

   Vb vb( SYSDESCR);                               // SNMP++ Variable Binding Object

   Pdu pdu;                                            // SNMP++ PDU

 

    //-------[ Construct a SNMP++ SNMP Object ]---------------------------------------

   Snmp snmp( status);                         // Create a SNMP++ session

   if ( status != SNMP_CLASS_SUCCESS) {             // check creation status

      cout << snmp.error_msg( status);                  //  if fail, print error string

      return;  }

 

   //-------[ Invoke a SNMP++ Get ]-------------------------------------------------------

   pdu += vb;                                      //  add the variable binding to the PDU

   if (  (status = snmp.get(  pdu, ctarget)) != SNMP_CLASS_SUCCESS)

      cout << snmp.error_msg( status);

   else {

      pdu.get_vb( vb,0);                             // extract the variable binding from PDU

      cout << “System Descriptor = ”<< vb.get_printable_value();  }  // print out the value

 

};  // Thats all!


2.2.        对介绍性例子的分析

真正属于SNMP++的语句就10行代码。(首先)用代理端的IP地址建立一个CTarget对象;(然后)用MIB对象所定位的系统描述符创建一个变量绑定(Vb);(接着就把)这个Vb纳入一个Pdu对象;(最后生成)一个Snmp对象来执行SNMPget操作。一旦找到了(所需的数据)(对应的)应答消息就被打印出来。(并且)所有的错误处理代码也都包含了。

你可能感兴趣的:(云的SNMP++,descriptor,c++,操作系统相关,网络,api,binding)