【VC++开源代码栏目提醒】:网学会员--在 VC++开源代码编辑为广大网友搜集整理了:使用VC_和SNMP_开发基于SNMP的网络管理系统 - 计算机理论绩等信息,祝愿广大网友取得需要的信息,参考学习。
现代计算机(总第二六七期)MODERNCOMPUTER2007.9开发案例收稿日期:2007-06-28修稿日期:2007-08-14作者简介:陈家雄(1979-),男,广西桂平人,助理工程师,工学学士,从事领域为网络管理系统和ARM嵌入式系统研究0引言随着网络的应用领域日益广泛,网络的规模在不断扩大,网络的结构也变得越来越复杂,为了保持和增加网络的可用性,减少故障的发生,需要不断加强对网络本身的管理。
目前,使用最广泛的网管协议是基于TCP/IP的SNMP使用VC++7.1和SNMP++开发基于SNMP的网络管理系统目前已成为一种流行的选择。
1SNMP++简介SNMP++是一套
开源并且免费的C++类的集合,它为网络管理应用的开发者提供高效、安全、易用的SNMP服务〔1〕。
SNMP++最初由HP公司开发,现由FrankFock组织维护和升级。
FrankFock在SNMP++基础上,又开发了Agent++和AgentX++。
Agent++用于实现SNMP代理(Agent);AgentX++用于给Agent++代理增加AgentX(主代理和子代理)协议支持。
2SNMP++在VC++7.1中的配置方法SNMP++在VC++7.1中的具体的配置方法如下:(1)从www.agentpp.com网站下载当前最新版本的SNMP++、Agent++、AgentX++、Agent++Win32及MSV7相应的压缩包,并将这些包解压在同一个目录下,各目录同级放置,互不包含;(2)打开msvc下dynamicLIB解决方案,选择“生成→生成解决
方案”,在dynamic目录下的debug或release目录下(与编译类型设置为Debug或Release有关)可以看到生成的各个dll和lib文件,例如sn-mp_pp.dll和agent_pp.dll,snmp_pp.lib和agent_pp.lib等;(3)在VC++7.1IDE中做以下设置:a.在“工具→选项→项目→VC++目录→包含文件”中加入需要用到的include目录,例如snmp++\in-clude,agent++\include,libdes,agentx++\include等。
b.在“工具→选项→项目→VC++目录→源文件”中加入需要用到的src目录,例如snmp++\src,a-gent++\src,libdes,agentx++\src等。
注意:以上设置与具体工程无关,只需在VC++7.1的IDE中设置一次,而以下设置与具体工程有关,每新建一个工程就必须设置一次。
(4)新建一个工程,名称定为MyTest(请根据实际应用命名);(5)在.cpp文件中包含所需的头文件,例如#in-clude”snmp_pp/snmp_pp.h”;(6)在“项目→属性→链接器→命令行→附加选项”中加入“snmp_pp.lib”,或直接在源码中加入”#pragmacomment(lib,”snmp_pp.lib”);”即可;(7)程序编译类型设置为Debug时,需将msvc\dynamic\debug目录中的snmp_pp.dll和sn-mp_pp.lib拷贝到工程目录中;程序的编译类型设置为Release,则需将msvc\dynamic\release目录中的sn-mp_pp.dll和snmp_pp.lib拷贝到工程目录中;(8)选择“生成→生成MyTest”菜单,即可在工程使用VC++和SNMP++开发基于SNMP的
网络管理系统陈家雄(中国电子科技集团公司第三十四研究所,桂林541004)摘要:介绍了SNMP++的特点及其在VC++7.1中的配置方法,并给出了基于SNMP++的常用SNMP操作的应用程序实例。
关键词:SNMP;MIB;SNMP++;VC++;网络管理MODERNCOMPUTER2007.9现代
计算机(总第二六七期)开发案例目录下的Debug或Release目录下生成相应的exe文件。
(9)发布MyTest.exe程序时,需将snmp_pp.dll文件拷贝到系统目录如C:\Windows\system32中,或把snmp_pp.dll与MyTest.exe放在同一个目录中。
3MIB文件的使用MIB(ManagementInformationBase,管理信息库)文件定义了由代理(Agent)维护的各种变量,它们由网络管理系统
工作站(manager)来进行存取操作,从而实现具体的网络管理。
MIB文件提供了被管理对象的文本名字和其十进制点分式的对象标识符(OID)之间的对应关系〔2〕,例如,系统描述符(SysDescr)对应的OID为1.3.6.1.2.1.1.1.0。
为了提高网络
管理系统程序的清晰度和可维护性,应在程序中使用被管对象的文本名字而非一长串的十进制点分形式OID。
要做到这一点,可通过编译MIB文件的方法来获得一个头文件,该头文件包含了MIB文件中所有被管理对象的文本名字与其十进制点分式OID的对应关系。
编程时,将该头文件包含进相应的.cpp源文件即可。
以编译MIB-II(RFC1213)为例,具体的操作步骤如下:(1)下载
免费的MIB编译工具AgentGenv1.5Standard;(2)直接解
压缩AgentGenv1.5Standard至硬盘中的某个目录下,例如G:\AgentGenv1.5Standard。
在G:\AgentGenv1.5Standard目录下建立名为mibrepos-itory的空文件夹。
运行AgentGenv1.5Standard的计算机上需安装JRE1.2.2或者更高版本的Java运行环境;(3)将MIB-II及其相关的引用文件拷贝到G:\AgentGenv1.5Standard目录中,这些文件包括:RFC1155-SMI、RFC1212、RFC1213-MIB。
然后创建一个名为MibList.txt的文本文件,其内容为上述3个文件名
列表,每个文件名各占一行;(4)点击Windows的“开始→运行”菜单,运行cmd命令来打开命令行控制台;(5)输入命令“G:”及“cdG:\AgentGenv1.5Stan-dard”,将当前目录切换到G:\AgentGenv1.5Standard;(6)输入并运行命令“agentgen.batmibrepositoryinitialize”;(7)输入并运行命令“agentgen.batmibrepositoryloadMibList.txt”;(8)敲入并运行命令“agentgen.batmibrepositorygenerateRFC1213-MIBh3.5>rfc1213.h”。
(9)编辑生成的rfc1213.h文件,保留所有形如以下的宏定义:#defineoidSysDescr”1.3.6.1.2.1.1.1.0”#defineoidSysLocation”1.3.6.1.2.1.1.6.0”其余内容全部删除。
编辑完成后保存文件。
至此,我们就得到了使用SNMP++开发SNMP网络管理
系统所需的rfc1213.h头文件。
4应用程序实例下面就SNMP网络管理系统中
常用的Get、Set操作给出具体的应用程序实例,使用的SNMP++为当前的最新版本3.2.21a。
4.1取得(Get)某被管设备的系统描述符(SysDe-scr)值#include”snmp_pp/snmp_pp.h”//SNMP++的头文件#include”snmp_pp/oid.h”#include”rfc1213.h”//==包含上述步骤得到的头文件==voidCSNMP_PP_Example::get_system_descriptor(){Snmp::socket_startup();//初始化socket子系统snmp_versionversion=version1;//默认版本为v1intretries=1;//默认重试次数为1inttimeout=100;//默认超时时间为1秒u_shortport=161;//默认SNMP端口为161OctetStrcommunity(”public”);//共同体intstatus;//返回状态UdpAddressaddress(”192.168.1.254”);address.set_port(port);//设定端口CTargetctarget(address);ctarget.set_version(version);//设置SNMP版本ctarget.set_retry(retries);//设置自动重试次数ctarget.set_timeout(timeout);//设置超时ctarget.set_readcommunity(community);//设置读共同体Oidoid(oidSysDescr);//oidSysDescr在头文件rfc1213.h中定义Vbvb(oid);//SNMP++变量绑定(VariableBinding)对象Pdupdu;//SNMP++PDUSnmpsnmp(status);//创建一个SNMP++会话if(status!=SNMP_CLASS_SUCCESS){//检查创建状态,如果创建失败则弹出错误信息现代计算机(总第二六七期)MODERNCOMPUTER2007.9开发案例DevelopmentofSNMP-BasedNetworkManagementSystembyVC++andSNMP++CHENJia-xiong(ChinaElectronicsTechnologyGroupCorporationNo.34thResearchInstitute,Guilin541004)Abstract:Keywords:SNMP;MIB;SNMP++;VC++;NetworkManagementIntroducesthecharacteristicsandconfiguremethodinVC++7.1ofSNMP++,andproducestheapplicationexamplesaboutSNMPcommonlyusedoperationsbasedonSNMP++.AfxMessageBox(snmp.error_msg(status),MB_OK|MB_ICONINFORMATION);return;}pdu+=vb;//将变量绑定(variablebinding)加入PDU中//调用SNMP++的Get操作if((status=snmp.get(pdu,ctarget))!=SN-MP_CLASS_SUCCESS){//如果Get操作失败AfxMessageBox(snmp.error_msg(status));}else{pdu.get_vb(vb,0);//从PDU中提取变量绑定(variablebinding)AfxMessageBox(vb.get_printable_value());//用消息框显示该值}Snmp::socket_cleanup();//关闭socket子系统}4.2设置(Set)某被管设备的系统位置(SysLoca-tion)值voidCSNMP_PP_Example::get_system_location(){...//省略的内容,与4.1中相应位置的非黑体字
代码相同,下同OctetStrcommunity(”private”);//共同体...//省略的内容ctarget.set_writecommunity(community);//设置写共同体Oidoid(oidSysLocation);//oidSysLocation在头文件rfc1213.h中定义...//省略的内容CStringszLoc=”No.98,LiuheRoad,Guilin,China”;vb.set_value(szLoc);//设置vb的值pdu+=vb;//调用SNMP++的Set操作status=snmp.set(pdu,ctarget);if(status!=SNMP_CLASS_SUCCESS){//如果Set操作失败AfxMessageBox(snmp.error_msg(status),MB_OK|MB_ICONWARNING);}else{AfxMessageBox(”Set成功!”,MB_OK|MB_I-CONINFORMATION);}...//省略的内容}5结语从实际应用情况来看,VC++7.1和SNMP++的结合使用不但大大降低了SNMP网络管理系统开发的复杂性,而且明显缩短了开发周期,SNMP++易用、安全和可扩展的特性使其表现十分出色。
SNMP++不但可以高效地开发基于SNMP协议的网络管理系统,还可以方便、可靠地与第三方软件协作开发其他与网络管理相关的应用,例如采用VC++7.1为集成开发环境,通过SNMP++与BorlandVisiBroker或ACE/TAO
软件的协作来开发SNMP/CORBA网关等。
参考文献〔1〕Hewlett-Packar公司.snmp_pp_version2.6111July,1997.doc.1997:9~88〔2〕唐宝民,张颖.电信网监控和管理技术.北京:人民邮电出版社,2006:138~168