华拓科技网
您的当前位置:首页用WinSNMP API实现网络管理站编程技术的研究

用WinSNMP API实现网络管理站编程技术的研究

来源:华拓科技网
维普资讯 http://www.cqvip.com 第24卷第1期 2007年1月 计算机应用与软件 Computer Applications and Software  ̄o1.24,No.1 Jan.2007 用WinSNMP API实现网络管理站编程技术的研究 余小高 (武汉理工大学计算机科学与技术学院 湖北武汉430063) 摘要 介绍了SNMP的工作原理,对WinSNMP API作了简明扼要的描述,剖析了WinSNMP接口规范,归纳出其相应的软件开 发的通用性步骤,最后实现SNMP管理站的基本功能的一个范例。 关键词 SNMP WinAPI 网络管理站 THE RESEARCH ON THE PROGRAM TECHNIQUE OF】[0 PLEMENTING NMS IN WinSNMP API Yu Xiaogao (School ofComputer Science and Technology,Wuhan UniversityofTechnology,WuhanHubei 430063,China) Abstract This paper introduces the SNMP principle,concisely describes WinSNMP API,and analyses the interface criterion.then con- cludes the common steps of the developing software,lastly,pm ̄ams two examples to realize the basal function of SNMP NMS. Keywords SNMP WinAPI NMS 谈及的管理端的SNMP编程。它为网络管理提供了一个友好的 1引 言 随着网络的高速发展,网络管理的难度和要求日益提高,网 图形界面,用户通过它完成部分或全部配置操作,以实现网络管 理的各种需要。 SNMP代理是一个在被管理网络设备上运行的软件模 块,一般在设备出厂时已开发并被烧录到设备上。该软件模块 络的可管理性和智能化是今后各类网络的发展方向。SNMP (简单网络管理协议)是目前在计算机网络中用得最广泛的网 络管理协议,该协议是基于TCP/IP的网管标准,广泛应用在分 组交换网络的管理中,并成为事实上的管理标准。如何管理计 算机网络,如何建立一个有效的,满足要求的网络管理系统,这 是当今网络管理技术人员必须掌握的技术。以WinSNMP API 作为一个智能前端处理器,实现管理功能,负责维护本地的管理 信息,并通过SNMP向管理进程发送相关信息。 MIB是一个概念上的数据库,由被管理对象组成。该库 定义了网络设备的各项参数,管理站通过对这些参数的读取和 设置来实现对设备的监控。每个管理代理管理MIB中属于自 己的本地对象。这些对象的信息共同构成全网的MIB。SNMP 为基础实现SNMP网络管理站的软件编程,是比较接近底层的 开发,可以使程序员真正了解SNMP底层机制,了解微软公司提 协议的核心是被管理的对象。MIB的结构必须符合使用TCP/ 供的网管开发者必须遵循的开放式单一接口规范,并且用这种 方法开发的软件将具有更高的灵活性。目前,可以说以Win— IP的Intemet的管理信息结构(SMI)。RFC1155中的管理信息 结构详细描述了MIB中对象的定义、组织、识别机制和如何在 SNMP API为基础进行的网络管理软件编程才是真正SNMP 编程。 协议上编码传输。SMI最关键之处在于被管对象的定义使用了 ASN.1语言来描述。事实上,Interact的SMI和相应的MIB是独 立于具体的管理协议的(含SNMP),这对供应商和用户都有 2 SNMP工作原理 SNMP实际上采用的是客户 服务器模型,其中客户端也 好处。 SNMP规定使用用户数据报协议(UDP)作为第4层传输协 议,管理进程和代理进程之间以SNMP报文形式交换信息。由 即管理端对应的管理进程,服务器端也即代理端对应着代理进 于在SNMP中使用UDP协议,所以有可能发生管理进程和代理 程,如图1所示。 进程之间数据报丢失的情况。因此一定要有超时和重传机制。 信息交换可以由两种情况触发:一个是由管理者以轮询的方式 触发,另一个则是由代理进程发送trap报文触发。 由于UDP使用的是无连接服务。因此SNMP也无需在管 理进程和代理进程之间保持连接。SNMP有5种报文类型: (1)Get—request操作图1 SNMP代理 MIB及管理者的关系 管理进程从代理进程处检索变量名 管理站(NMS) 是运行在管理端软件模块,这就是本文所 收稿日期:2005—02—22。余小商.副教授,主研领域:Web技术。 维普资讯 http://www.cqvip.com 122 计算机应用与软件 2007生 所指的对象实例的值。 实现。NMS应用程序的一般实现步骤如图3所示。 (2)Get.Next.request操作检索变量名所指的下一个对象 实例的值,可以检索未知对象,和Get.request结合使用可以得 到一个表中的对象。 (3)Set.erquest操作设置或更新代理进程的一个或多个 参数的值。 (4)Get.response操作代理进程用本消息响应Get-erquest 和Set—request。 (5)Trap操作代理进程主动发出的报文,向管理站报告 管理对象的状态变化。 前面的3个操作是由管理进程向代理进程发出的。后面两 图3 NMS实现的一般步骤 个则是由代理进程发给管理进程的。 其中,虚线框内的步骤为根据需要可以省略的步骤;对于方 框中的每一个步骤在winSNMP API中都可以找到相应的一个 3用WinSNMP API技术实现SNMP编程 或多个API函数来实现,发送线程包括以下几个步骤: (1)创建管理操作所指定的被管实体的OID; 3.1 WinSNMP简介 (2)创建变量绑定表VBL; WinSNMP API是微软公司为SNMP协议开发的应用程序 (3)生成PDU,并指定其中的内容; 接I=i,是一组用于构造SNMP服务、扩展代理和SNMP管理系统 (4)发送报文。 的库函数,它定义了过程调用、数据类型、数据结构和相关的语 接收线程包括以下几个步骤: 法。管理API是Microsoft为SNMP管理应用提供的动态链接 (1)接收报文; 库,具体文件是MGMTAPI.DLL。管理应用程序从管理API处 (2)提取PDU中的VBL,记录VBL中的每个变量的OID 接收数据,向管理API发送管理信息,并通过管理API与Win・ 和取值; Sock通信,实现底层网络管理功能。管理应用程序的详细运行 (3)完成格式转换,并传递到相应的管理应用程序中。 过程如图2所示。 3.3 WillsNMP编程实例 WinSNMP以函数的形式封装 下面是笔者曾经根据上述SNMP工作原理编写的管理端部 了SNMP协议的各部分,且针对 分代码的两个范例,分别实现Get操作和Set操作,对数据类型 SNMP使用UDP的特点而设置了 的转换也给出了范例,两个例子均在VC6,0环境下调试通过。 消息重传、超时机制,即可设置消 例1是对被管网络设备实现Get操作,操作对象是sys. 息重传次数和传送超时时间等。 ten.sysObjectlD.0,代码如下: 各种函数的具体参数和使用方法 void CHdxl7Dlg::MyGet() 可参阅Microsoft VC6.0的帮助 图2管理应用程序 { 文件。 LPSNMP MGR—SESSION session; 详细运行过程 WinSNMP API提供的函数主 RFCI 157VarBindList variableBindings; AsnObjeetldentiifer oid; 要分为6种类型: Asnlnteger errorStatus; (1)通信函数包括启动、关闭WinSNMP管理应用,启动、 Asnlnteger errorIndex; 关闭WinSNMP会话,以及发送和接收SNMP报文等的函数。 SnmpStartup((unsigned long})2,(unsigned long )2,(unsinged long (2)实体和上下文函数用于友好的对象名称和抽象的对 )2,(unsinged long )SNMPAPI—UNTRANSLATED—V2,(unsigned long 象名称之间的转换。 )SNMPAPI—ON);//启动WinSNMP (3)数据库函数 用于设置SNMP报文的超时和重传 session=SnmpMgrOpen(“21 1.69.142.142”,“public”。6OOO,3); 方式。 //创建一个snmp会话 (4)PDU函数用于创建、删除、查询和设置SNMP PDU。 if(session==NULL (5)应用函数提供加密和解密的方法以及对对象标识符 {MessageBox(“与代理连接失败!”);return;} if(!SnmpMgrStrToOid(LPSTR)”system.sysObjeetlD.0”,&oid)) (Object Identity,OID)的操作。 //将对象标识符转换为等价的A8nObjectIdentifier类型 (6)变量绑定函数用于创建、删除和设置变量绑定列表 {Mes ̄geBox(”Oid转换错误!”);return;} (Variable Binding Lists,VBL)VBL是PDU的一部分,包含了变 variableBindings.1en=1; //创建变量绑定表VBL 量名称和相关数据。 variableBindings.1ist=(RFC1 157VarBind女)SnmpUtilMemAlloc 3.2用WinSNMP API实现SNMP网络管理站 (sizeof(RFC1157VarBind) variableBindings.1en); if(variableBindings.1ist==(RFC1 157VarBind )NULL) 根据以上描述,可以说NMS的主要功能就是处理网络管理 {MessageBox(”内存分配错误Il1);return;} 进程和代理进程之间传输的SNMP报文,从而实现网络管理进 variableBindings.1ist[0].name=oid; 程和代理进程之间的通信。简单地说,就是构造、发送、接受和 variableBindings.1ist[0].value.asnType=ASN—NULL; 处理SNMP报文,要实现的两个基本操作是Get和Set。在开发 //设置数据类型 NMS程序时,可以把发送和接收部分分别用两个的线程来 (下转第131页) 维普资讯 http://www.cqvip.com 第1期 曾宪文:基于 J、波变换的低频分量图像检索研究 m131 表1是相关法、误差法这两种模板匹配算法对两幅图像进 行模板匹配的结果比较。 —ObjcctiD.Format(”%s.%d”,m—ObjectlD,PP.ids[k]); ,, : ’ UpdateData(false); //转换system.sysObjectlD.0的对象的 表1 两幅目标圄片和选用模板图片在两种算法下酌匹配相关数据表 被搜索 匹配 模板 R算法 相关 阈值 图尺寸 算法 大小 时间 系数 阈值:0 误差值 =8000 一 ,  .//值,并显示在文本框中 break; ……//读者可以在此处进行扩充,以处理其它类型的数据 } f else 256 256 误差法 13 11 0.55秒 0.9991 0.60秒 0.38秒 1756 相关法 l5 22 1.16秒 0.9973 1.43秒 0.44秒 4323 540 480 误差法 13 l7 4.12秒 0.997l 4.56秒 2.30秒 21l7 相关法 ll 17 3.41秒 0.9787 3.85 2.20秒 4724 switch(errorStatus) { 结果表明:被搜索图越大,匹配速度越慢;模板越小,匹配速 case SNMP—ERRORSTATUS—NOSUCHNAME; 度越快。误差法速度较快,阈值的大小对匹配速度影响大,和模 MessageBox(”The requested operatiOn identified all unknown 板的尺寸有关。 variable.”); 采用基于小波压缩的图标,即以低频成分进行图像数据库 break; ……检索提取模板图片的低频成分,作为进行检索的模板来检索图 //读者可以在此处进行扩充,以便处理其它类型的错误 } l 像数据库中的低频部分图像字段:B口检索的特征字段 ,由于进行 SnmpUiliv'arBind ̄ListFree( ̄vraiableBindings); 了两次压缩,图像的像素大大减少到原来的十六分之一,从l而减 。 //释放变量绑定表所占据的内存 少了计算量,匹配速度大大加快。 if(!SnmpMgrClose(session)) //关闭snmp会话 { MessageBox(’’error on SnmpMgrClose\n”);return;f 4结论 } 本文在基于内容的图像检索中采用了基于小波变换的模板 例2是对被管网络设备实现Set操作,操作对象是sys- 匹配技术作为检索的方法,对相关法和误差法进行了对比,减少 tern.sYsDescr.0,代码如下: void CHdxl7Dig::MySet(char m—deBcr) 了计算量,同时虽然模板匹配技术还是存在相当的运算负荷,但 J …… 本文又提出了基于图像低频分量对象的检索方式,并非真正对 if(!SnmpMgrStrToOid(LPSTR)“system.sysDeser”,&old) 图像数据库中的大对象图像进行检索,从而大大减少了匹配带 {MessageBox(”Oid转换错误!II);return;! 来的海量计算,给图像检索带来比较高的效率,并且不需要先验 char十temp new char[strlen(trl—descr)+1]; 的图像知识。 sprintf(temp,”%s”,m—descr); 参考文献 varlableBindings.1ist[0].value.asnType:ASN—OCTETSTRING ; [1]徐淑平、洪亲,“基于小波变换的图像检索”。《计算机与现代化》。 //设置数据类型 2005 No.11. variableBindings.1ist[0].value+asnValue.stirng.dynamic=TRUE; [2]Sagarmay Deb,Yanchurl Zhang,An overview of content—based image re— "variableBindings.1ist[0].value.asnValue.stirng.1englh=strlen(temp)' trieval techniques Advanced Irformation Networking and Applications, variableBindings.1lst[0].value.asnValue.stirng stream=(unsigned 2004.AINA 2004.18th International Conferencel on,Volume:1,29—31 char )temp; March 2004 PP.59—64 Volt 1. if(!SnmpMgrRcquest<session,ASN—RFC1157一SETREQUEST。 [3]秦前清、杨宗凯,实用小波分析,西安:西安交通大学出版社,1998. &vafableBindings,&errorStatus,&errorlndex)) [4]刘洞渡、李正明等,“一种基于小波压缩韵图象检索系统的研究”, //发送报文,实现sec操作,设嚣system.sysDescr.0的值 《计算机工程与设计》,Vo1.25 No.6 2004 PP.922—923. [5]French J.C.,Chapin A.C.,M in W.N.,An application of multiple f . viewpoints to content—based image retireval Digital Libraries,2003.Pro— 从以上代码可以看出。尽管WinSNMP API函数繁琐复杂, ceedings.2003 Joint Conference on.27—31 May 2003・PP.128 130. 然而只要对snmp底层机制比较了解,熟悉WinSNMP API函数。 编写出高质量的SNMP管理程序并非难事。 (上接第122页) 当然,最后别忘记在工程和文件中适当的位置加入以下文 if(Sn pMgrReque8t(session,ASN—RFCI 157一GETREQU,EST 件:snmp.h、mgmtapi.h、Winsnmp.h、snmpapi.1ib、mgmtapi.1ib和 &variableBindings,&error'Status。&errorIndex)==TRUE) Wsnmp32.1ib。 //发送报文,实现Get操作,取得system.sysObjectlD.0的值. 参考文献 j switch(vaifableBindin ̄.ust ̄o].value.asnType) [1]蓝波、杨琴,“基于SNMP动态扩展MIB的设计与实现【J ,《计算 机工程》,2oo4年(7):192~l94. case ASN._0BJECTIDENTIFIER:AsnObjectIdentifie yl; [2]王焕然、徐明伟,“SNMP网络管理综述[J]”,《小型微型计算机系 //该开关语句的功能是进行数据类型转换 统》,2004年(3):358—366. yl±variableBindings.1ist[0].value.asnValue.object; [3]费洪晓、康松林、施荣华,“基于SNMP的网络应用软件监控系统设 UINT k; 计与实现[J]”,《计算机工程与应用》 20o4(15):l22—1:25・ m[4]蔡丽、张大方、谢商岗等,“基于SNMP网络管理系统的设计与实现 —ObjeetlD=’’”; for(k=O;k<PP.idLength;K++) 『J].',《计算机应用》,2003(3):55~57. 

因篇幅问题不能全部显示,请点此查看更多更全内容