SNMP ++.docx

上传人:b****7 文档编号:8951882 上传时间:2023-02-02 格式:DOCX 页数:103 大小:64.71KB
下载 相关 举报
SNMP ++.docx_第1页
第1页 / 共103页
SNMP ++.docx_第2页
第2页 / 共103页
SNMP ++.docx_第3页
第3页 / 共103页
SNMP ++.docx_第4页
第4页 / 共103页
SNMP ++.docx_第5页
第5页 / 共103页
点击查看更多>>
下载资源
资源描述

SNMP ++.docx

《SNMP ++.docx》由会员分享,可在线阅读,更多相关《SNMP ++.docx(103页珍藏版)》请在冰豆网上搜索。

SNMP ++.docx

SNMP++

SNMP++

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

1.     介绍

1.1.      什么是SNMP++

1.2.      SNMP++的本质

1.2.1.        简单易用的SNMP++

1.2.2.        编程安全的SNMP++

1.2.3.        可移植的SNMP++

1.2.4.        可扩充的SNMP++

2.     一个介绍性的例子

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

2.2.      对介绍性例子的分析

3.     SNMP++特性

3.1.      完整的一套SNMP C++类

3.2.      SNMP内存的自动管理

3.3.      简单易用的

3.4.      强大灵活的

3.5.      可移植对象的

3.6.      自动超时和重发机制

3.7.      阻塞模式

3.8.      异步的非阻塞模式

3.9.      Notification、Trap的收发

3.10.     通过双效的API支持SNMPv1和SNMPv2

3.11.     支持SNMP的Get,GetNext,GetBulk,Set,Inform和Trap的操作

3.12.     通过继承实现重定义

4.     在MicrosoftWindows 系列操作系统上使用SNMP++

4.1.      WinSNMPVersion1.1的使用

4.2.      对IP和IPX的支持

4.3.      对Notification、Trap收发的支持

4.4.      与HPOpenViewforWindows 兼容

5.     在UNIX上使用SNMP++

5.1.      统一的类的接口

5.2.      Windows到UNIX的仿真与移植

5.3.      与HPOpenViewforUNIX 兼容

6.     SNMPSyntaxClasses

7.     ObjectIdClass

7.1.      对象标识符类

7.2.      OidClass的成员函数列表

7.3.      一些OidClass的例子

8.     OctetStrClass

8.1.      八位字节类

8.2.      OctetStrClass的成员函数列表

8.3.      注意

8.4.      一些OctetStrClass的例子

9.     TimeTicksClass

9.1.      时间戳类

9.2.      TimeTicksClass的成员函数列表

9.3.      注意

9.4.      一些TimeTicksClass的例子

10.          Counter32Class

10.1.     32位计数器类

10.2.     Counter32Class的成员函数列表

10.3.     一些Counter32Class的例子

11.          Gauge32Class

11.1.     容量类

11.2.     Gauge32Class的成员函数列表

11.3.     一些Gauge32的例子

12.          Counter64Class

12.1.     64位计数器类

12.2.     Counter64Class的成员函数列表

12.3.     一些的Counter64Class例子

13.          AddressClass

13.1.     什么是网络地址类?

13.2.     为什么要使用网络地址类?

13.3.     Addressclass

13.4.     AddressClasses及其接口

13.5.     IpAddressClass的特点

13.6.     GenAddress的特点

13.7.     AddressClass的有效性

13.8.     UdpAddresses和IpxSockAddresses

13.8.1.       用UdpAddresses发送请求

13.8.2.       用IpxSockAddresses发送请求

13.8.3.       用UdpAddress和IpxSockAddress接收Notification

13.9.     有效的地址格式

13.10.       AddressClass例子

14.          TheVariableBindingClass

14.1.     VariableBindingClass成员函数列表

14.2.     VbClass的公有成员函数

14.2.1.       VbClass的构造和析构函数

14.2.2.       VbClass的GetOid/SetOid成员函数

14.2.3.       VbClass的GetValue/SetValue成员函数

14.2.4.       用一个GenAdress对象设置value

14.2.5.       用一个UdpAdress对象设置value

14.2.6.       用一个IpxSockAdress对象设置value

14.2.7.       用一个Octet对象设置value部分

14.2.8.       VbClass成员函数:

GetValue

14.2.9.       Vb 对象的成员函数:

GetSyntax

14.2.10.     检查Vb对象的有效性

14.2.11.     把Vb对象付给另一个Vb对象

14.2.12.     Vb对象的错误信息

14.3.     VbClass例子

15.          PduClass

15.1.     PduClass成员函数列表

15.2.     PduClass的构造和析构

15.3.     访问Pdu的成员函数

15.4.     PduClass重载操作符

15.5.     PduClass处理Traps和Informs的成员函数

15.6.     加载Pdu对象

15.7.     加载Pdu对象

15.8.     卸载Pdu对象

16.          SnmpMessageClass

17.          TargetClass

17.1.     抽象的Target

17.2.     Target地址

17.3.     重发机制

17.4.     TargetClass接口

17.5.     CTargetClass(以Community为基础的Target)

17.5.1.       CTarget对象可通过3种不同的方式构建

17.5.2.       修改CTargets

17.5.3.       访问CTargets

17.5.4.       CTargets例子

18.          SnmpClass

18.1.     SnmpClass成员函数列表

18.2.     双效的API

18.3.     SnmpClass的公共成员函数

18.3.1.       SnmpClass的构造和析构函数

18.3.2.       SnmpClass构造函数

18.3.3.       SnmpClass析构函数

18.3.4.       SnmpClass发送请求的成员函数

18.3.5.       SnmpClass的阻塞方式成员函数:

 Get

18.3.6.       SnmpClass的阻塞方式成员函数:

 GetNext

18.3.7.       SnmpClass的阻塞方式成员函数:

 Set

18.3.8.       SnmpClass的阻塞方式成员函数:

 GetBulk

18.3.9.       SnmpClass的阻塞方式成员函数:

Inform

18.4.     SnmpClass的异步方式成员函数

18.4.1.       SNMP++异步回调函数的类型定义

18.4.2.       取消一个异步请求

18.4.3.       SnmpClass的异步成员函数:

Get

18.4.4.       SnmpClass的异步成员函数:

Set

18.4.5.       SnmpClass的异步成员函数:

GetNext

18.4.6.       SnmpClass的异步成员函数:

GetBulk

18.4.7.       SnmpClass的异步成员函数:

Inform

18.5.     SNMP++通知的方法

18.5.1.       发送Trap

18.5.2.       接收Notification

18.5.3.       使用OidCollection,TargetCollection和AddressCollections过滤

18.6.     SNMP++Class返回的错误号

18.6.1.       SnmpClass的错误消息成员函数

19.          运行模式

19.1.     MicrosoftWindows事件驱动系统的运作

19.2.     OpenSystemsFoundation(OSF)X11Motif的运作

19.3.     不以GUI为基础的应用的运作

20.          状态&错误编号

21.          错误状态值

22.          SnmpClass例子

22.1.     GettingaSingleMIBVariableExample

22.2.     GettingMultipleMIBVariablesExample

22.3.     SettingaSingleMIBVariableExample

22.4.     SettingMultipleMIBVariablesExample

22.5.     WalkingaMIBusingGet-NextExample

22.6.     SendingaTrapExample

22.7.     ReceivingTrapsExample

23.          参考书目

SNMP++框架的对象模型(ObjectModelingTechnique)视图

1.         介绍

目前有许多可以创建网络管理应用的SNMP的API。

大多数API都提供了一个很大的函数库,调用这些函数的程序员需要熟悉SNMP内部的工作原理和它的资源管理机制。

这些API大多都是平台相关的,导致了SNMP的代码也成了操作系统相关的或者网络系统平台有关的,难以移植。

另一方面由于C++有丰富的、可复用的标准类库,用C++开发应用成了目前的主流,然而C++标准类库所缺少的正是一套封装好的处理网络管理的类。

如果基于面向对象的方法来进行SNMP网络编程,可以提供以下诸多好处:

易用、安全、可移植、能扩展。

因此SNMP++灵活有效的解决了其他类似API执行和管理起来都很痛苦的问题。

1.1.        什么是SNMP++

SNMP++是一套C++类的集合,它为网络管理应用的开发者提供了SNMP服务。

SNMP++并非是现有的SNMP引擎的扩充或者封装。

事实上为了效率和方便移植,它只用到了现有的SNMP库里面极少的一部分。

SNMP++也不是要取代其他已有的SNMPAPI,比如WinSNMP。

SNMP++只是通过提供强大灵活的功能,降低管理和执行的复杂性,把面向对象的优点带到了网络编程中。

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的过程中尽可能少地影响现有代码。

SnmpTargetclass使之成为了可能。

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

这是为了方便那些不希望使用面向对象方法,而直接编写SNMP的底层机制的用户。

虽然SNMP++快速而方便,但是有些时候程序员也许希望直接使用底层的SNMPAPI。

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

使用SNMP++的用户不需要精通C++。

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

1.2.2.       编程安全的SNMP++

大多数SNMPAPI需要程序员去管理大量的资源。

不恰当的装载或卸载这些资源,会导致内存崩溃或泄漏。

SNMP++提供的安全机制,可以实现对这些资源的自动管理。

SNMP++的用户可以体验到自动管理资源与对话所带来的好处。

SNMP++在编程上的安全突出表现在下面的领域:

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

这包括对SNMP的结构、会话以及传输层的管理。

SNMPclass被设计成所谓的抽象数据类型(ADT),隐藏了私有数据,而通过提供公有的成员函数来访问或修改这些隐藏了的实例变量。

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

SNMP++的用户不需要关心如何为不可靠的网络传输机制提供可靠性。

可能出现的通信错误包括:

数据包丢失、数据包重复以及反复提取数据包。

SNMP++消除了所有这些问题出现的可能性,为用户提供了传输层的可靠性。

 

1.2.3.       可移植的SNMP++

SNMP++的主要目的之一就是提供一套可移植的API,进而穿越各种操作系统(Os)、网络系统(NOS)以及网络管理平台。

由于SNMP++隐藏了内部机制,所以从各个平台的角度来看SNMP++的公用接口都是一样的。

使用SNMP++的程序员不需要为平台迁移去修改代码。

另一个移植方面的问题是在多种协议上运行的能力。

目前,SNMP++能运行在IP协议和IPX协议上,或者两者都可以。

1.2.4.       可扩充的SNMP++

扩充不应该只是多一种选择,而是更深层次的。

SNMP++不仅是可扩充,而且是很容易扩充。

SNMP++的扩充囊括了对下列领域的支持:

新的操作系统、网络系统、网络管理平台、网络协议、SNMPv2及其新特性。

通过派生C++的类,SNMP++的用户可以根据自己的喜好继承、重载。

1.2.4.1.       重载SNMP++的基础类

应用的开发者可以通过派生出SNNP++的子类来提供所需的操作和属性,这正是面向对象的核心主题。

SNMP++的基础类被打造成通用的、没有包含任何具体的数据结构和操作。

通过C++派生类以及重新定义虚函数,可以很容易的添加新属性。

2.         一个介绍性的例子

在开始介绍SNMP++的各种特性之前,这里先举个简单的例子来展现它的强大和简单。

该例子是从指定的代理端上获取SNMPMIB的系统描述符(SystemDescriptorobject)。

包含了创建一个SNMP++会话、获取系统描述符,并打印显示出来的所需的所有代码。

其中重发和超时机制已经被SNMP++自动管理了。

以下属于SNMP++的代码,采用粗体显示。

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

#include “snmp_pp.h”

#defineSYSDESCR“1.3.6.1.2.1.1.1.0”          //ObjectIDforSystemDescriptor

voidget_system_descriptor()

{

  intstatus;                                      //returnstatus      

   CTargetctarget((IpAddress)“10.4.8.5”);     //SNMP++communitytarget

   Vbvb(SYSDESCR);                             //SNMP++VariableBindingObject

  Pdupdu;                                          //SNMP++PDU

 

   //-------[ConstructaSNMP++SNMPObject]---------------------------------------

  Snmpsnmp(status);                       // CreateaSNMP++session

  if(status!

=SNMP_CLASS_SUCCESS){           //checkcreationstatus

     cout<< snmp.error_msg(status);                //  iffail,printerrorstring

     return; }

 

  //-------[InvokeaSNMP++Get]-------------------------------------------------------

  pdu+=vb;                                     // addthevariablebindingtothePDU

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

=SNMP_CLASS_SUCCESS)

     cout<< snmp.error_msg(status);

  else{

      pdu.get_vb(vb,0);                            //extractthevariablebindingfromPDU

     cout<<“SystemDescriptor=”<< vb.get_printable_value(); } //printoutthevalue

 

}; //Thatsall!

2.2.        对介绍性例子的分析

真正属于SNMP++的语句就10行代码。

首先用代理端的IP地址建立一个CTarget对象;然后用MIB对象所定位的系统描述符创建一个变量绑定(Vb);接着就把这个Vb纳入一个Pdu对象;最后生成一个Snmp对象来执行SNMP的get操作。

一旦找到了所需的数据,对应的应答消息就被打印出来。

另外,所有的处理错误代码也都包含在内了。

3.         SNMP++特性

3.1.        完整的一套SNMP C++类

SNMP++是以一套C++类作为基石的。

这些类是:

对象描述符(Oid)类、变量绑定(Vb)类、协议数据单元(Pdu)类、Snmp类。

并且,其他各种用抽象语法表示(ASN.1)来描述的管理信息结构(SMI),也被抽象成了简单的、面向对象的类型。

3.2.        SNMP内存的自动管理

当SNMP++的对象被实例化或销毁的时候, 其相关的类可以自动管理着各种各样的SNMP结构和资源。

这就使得应用的开发者不用再担心数据结构和资源的卸载,不然就得为防止内存的崩溃或者泄漏提供有效的保护措施。

SNMP++的对象的实例化可以是静态的,也可以是动态的。

静态的实例化可以在对象脱离它的作用域时卸载掉;动态分配则需要使用C++的new和delete。

在SNMP++内部,有许多被隐藏和保护在公用接口后面的SMI结构。

所有的SMI结构都是在内部管理的,程序员不需要定义或管理SMI的结构和它的值。

因为在SNMP++内绝大部分地方是不存在C的指针的。

3.3.        简单易用的

由于隐藏并管理了所有SMI结构和它们的值,SNMP++的类使用起来即简单又安全。

外部程序员无法破坏到隐藏和保护在作用域后面的东东。

3.4.        强大灵活的

SNMP++提供了强大灵活的功能,降低了管理和执行的复杂性。

每个SNMP++对象都通过建立一个会话来和一个代理端联系。

即由一个SNMP++的对话类的实例,就能处理所有与特定代理端的连接。

另外自动重发和超时控制的机制,为每个SNMP++对象都带来了可靠性。

一个应用可能会包含许多SNMP++的对象的实例,每个实例都可能与相同或不同的代理端通话。

有了这个功能强大的特性,网络管理程序就可以为每个管理单元建立起不同的会话。

另一方面,就算单一的SNMP会话也可以解决问题。

例如:

一个应用可以通过一个SNMP++对象来处理图形统计,另一个SNMP++对象监控trap,也许还有第三个SNMP++对象用以浏览SNMP。

SNMP++自动并行处理了同一时刻来自不同SNMP++实例的请求。

3.5.        可移植对象的

SNMP++的主体是可以移植的C++代码。

其中只有SnmpClass的实现与不同的目标操作系统有关。

如果你的程序中包含了SNMP++的代码,那么导出这部分代码的时候,就可以不做任何修改。

3.6.        自动超时和重发机制

SNMP++提供了自动超时和重发机制,程序员不用去实现超时或重发机制的代码。

重发机制是在SnmpTargetClass里面定义的,这就使得每一个目标(Target)都具有了它自己的超时/重发机制。

3.7.        阻塞模式

SNMP++提供了阻塞方式。

MS-Windows上的阻塞方式可以并发的阻塞从每个SNMP类的实例发出的请求。

3.8.        异步的非阻塞模式

SNMP++还为应答提供了异步的非阻塞的方式。

超时和重发机制同时支持阻塞和异步两种模式。

3.9.        Notification、Trap的收发

SNMP++允许在多种传输层上(包括IP和IPX)收发trap。

而且SNMP++还允许使用非标准的IP端口和IPX套接口来收发trap。

3.10.     通过双效的API支持SNMPv1和SNMPv2

SNMP++的设计可同时支持SNMPv1和SNMPv2的使用。

所有API的操作都被设计成了双效的,也即操作是SNMP版本无关的。

通过使用SnmpTarget类,与SNMP的版本相关的操作被抽象出来了。

3.11.     支持SNMP的Get,GetNext,GetBulk,Set,Inform和Trap的操作

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1