免费论文查重: 大雅 万方 维普 turnitin paperpass

论管理系统分布式网络管理系统中SNMP开发与实现

最后更新时间:2024-03-29 作者:用户投稿原创标记本站原创 点赞:5480 浏览:14266
论文导读:
摘 要:SNMP简单网络管理协议广泛应用在基于TCP/IP网络的分布式系统中,用来实现获取和设置分布式环境中端的信息,以实现对分布式系统的有效管理。本文讨论了SNMP中的实体结构和开发过程等问题,在被管理的实体中,通过进程获取本实体的状态等信息,再发送给指定的管理站软件,也可用通过trap方式将本身的改变信息发送给管理站软件;在管理端的软件中,通过SNMP在网络上任何地方获取所有支持简单网络管理协议的网络节点的信息,并且对其进行远程管理和控制。
关键词:网络管理;SNMP;进程;SNMP++;Agent++
:ADoI: 10.3969/j.issn.1003-6970.201

2.06.049

Development and Realization of the snmp-based distributed network management system
LIU Baohua,tIaN Yali,CHeN Duanying
(Lian Yun Gang Jari Deep Soft Company, Lian Yun Gang Jiang Su 222000, China )
【Abstract】SNMP is widely used in distributed systems based on tCP / IP network, used to get and set the agent in a distributed environment, in order to achieve effective management of distributed systems. this paper discusses the SNMP entity structure and development the problem, in a managed entity, through a agent process for obtaining the entity state information, and then sent to the designated station software, also ailable through trap will itself change information is sent to the management station software; in the management of terminal software, through SNMP obtaining information from anywhere on the network support SNMP and managing these device.
【Key words】network management; SNMP; agent process; SNMP++; Agent++
0 引言
所有网络的出现都是为了能够在网络节点上高效、可靠、安全的通信,从而来实现信息的传播和共享。而网络管理正是维护了这种高效的通信,保证了互联工作可靠地持续下去,具体来说,它能监视网络活动,控制设备的运行,并且能够承担起所有的其他相关任务,正如ISO定义的网络管理包含五个功能域:配置管理、故障管理、性能管理、安全管理和计费管理。简单网络管理协议SNMP广泛用于管理所有的网络设备,包括路由器、UNIX工作站和PC机等,只要它能支持进程的处理能力。而且SNMP能在当今各种网络协议上运行,如IPX、OSI、AppleTalk以及其它传输协议等。在网络管理系统中,应用SNMP很好地对系统各种设备进行监控,包括设备状态、网络流量、故障诊断等信息,判断各结点是否正常工作,有效地保
证了系统的正常运行。
1 网络管理模型和开发包简介

1.1 SNMP网络管理模型

SNMP网络管理模型主要由四部分组成: 网络管理站、被管设备、管理信息库(MIB)和管理协议(SNMP)。
SNMP管理模型具备典型的客户/服务器体系结构。网络管理站启动管理器进程,对网络设备发送各种查询报文,并接收来自被管设备的响应及陷阱(trap)报文,将结果显示出来,而被管设备上运行着进程,负责接收、处理来自网络管理站的请求报文,然后从设备上其他协议模块中取得管理变量的数值,形成响应报文,反送给管理站。在一些紧急情况下,如接口状态发生改变,呼叫成功等时候,主动通知管理站(发送陷阱TRAP报文)。管理对象的信息存放在被管设备的MIB库中。管理器进程将各种操作维护命令组装成SNMP报文,发送到进程,[3]进程通过操作MIB库完成这些请求,并且把结果送回给管理器进程,从而完成管理功能。
MIB是一个概念上的数据库,即每个受管理的SNMP设备都维护包含统计信息和其它数据的数据库。对管理员而言,只需要与MIB打交道,因为网络管理活动是通过访问和操作MIB中的管理对象实例来实现的。MIB中定义的大多数管理对象是为了实现配置管理好故障管理的,特别针对路由器和网关。

1.2 网络管理开发包和开发工具

1.2.1 网管开发包分析

SNMP++是为网络管理应用程序开发者提供的具有SNMP服务的一套C++类的集合。它具有基于面向对象模型建立的SNMP应用程序接口,但SNMP++并不是现有SNMP引擎的扩充和封装,为了效率和方便移植,它只用到了现有SNMP库里面的一部分。SNMP++的目的就是提供强大灵活的功能,把面向对象的优点带到了网络编程中。[4]
Agent++是在SNMP++的基础上,扩展了SNMP++中的概念,它是用来开发SNMP的一套C++类的集合。它继承了SNMP++的优点,封装了绝大部分的SNMP的标准操作,并且利用面向对象的特性,使开发者能够通过派生的子类,重载其中的虚函数,根据应用程序的需要灵活控制程序。

1.2.2 开发工具

编写SNMP网络管理论文导读:vb.set_oid(IFOUTOCTERS);for(intz=0;z<5;z++)pdu+=vb;if((status=snmp.get(pdu,ctarget))!=SNMP_CLASS_SUCCESS)cout<<snmp.error_msg(status);else{pdu.get_vbs(vb,5);for(intw=0;w<5;w++)cout<<vb.get_printable_value()<<“\n”;}}3Agent++应用开发3.1
软件和端程序时,C和C++语言是最常用的,因为WinSNMP和SNMP++等采用标准API外,SNMP++和Agent++也是基于C、C++开发的,所以用C、C++能够使SNMP的实现更加高效,程序的错误更少。对于MIB库的测试使用MG-SOFT Visual MIB Builder、MG-SOFT MIB Compiler和MG-SOFT MIB Browser,在网络管理系统中,根据平台的不同采用不同的开发环境,如windows下采用VC++

6.0,而Linux平台使用GNU C++ Compiler。

1.3 网管开发包的适用范围

SNMP++最主要的特点就是为各类型的操作系统、网络系统以及运行在其上的网络管理平台提供了一系列的便捷的API接口,所要SNMP有强大的性能。其主要适用范围如图1所示:
2 SNMP++应用和开发

2.1 SNMP++主要框架

SNMP++是以一套C++类作为基石的。它包含了对象描述符(Oid)类、变量绑定(Vb)类、协议数据单元(Pdu)类、Snmp 类。Snmp Systax 是描述管理信息结构的抽象数据集合,它包含的类集与设备的管理信息结构类型相对应,这些SNMP数据类型非常强大,而且容易使用。Snmp Sys- tax类集合主要包含了Oid、OctectStr、Uint32、TimeTicks、Counter32、Gauge32、Int32、Counter64、Address、IpAddress、UdpAddress、IpxAddress、IpxSockAddress、MacAddress和GenAddress等。除了Snmp Systax集合外,还包含了Vb、Pdu和Target集合等,详细情况可在开发实例中说明。

2.2 SNMP++开发实例

本例通过对SNMP++的应用,来获取网络节点设备的信息,为了方便起见,只获取简单的系统信息,如系统描述、系统用户名和系统运行时间等信息。这里可以是获取管理站信息,也可用是获取被管设备信息,因为本例中主要用到了Get命令来主动获取支持简单网络管理协议的网络节点的信息,通过这种方式可用很方便的获取设备的网络流量、接口信息等。值得注意的是在创建snmp会话后,要指定目标地址、snmp的版本号、超时设置以及snmp团体信息等。如对交换机设置而言,要设置团体读写方式、是否允许发送陷阱以及发送陷阱的具体方向等。
在网络管理系统中,通过MIB库可用获取很多有用的信息,通过现有的Oid可以获取被管设备的开机时间(sysUpTime)、接口带宽(ifSpeed)、接口当前状态(ifOperStatus)、最后一次状态改变的时间(ifLastChange)、接口接收的总总字节数(ifInOcters)、接口发送的总字节数(ifOutOcters)、发往高层协议的单播包数(ifInUcastPkts)、高层协议请求的非单播包数(ifOutNUcastPkts)、接口丢弃的输入包数(ifInDiscards)、错误的输入包数(ifInErrors)、由于包含错误而不能传输的输出包数(ifOutErrors)和输出队列中的包数(ifOutQlen)等信息,获取这些信息后,通过相应的计算公式就可以得到更多的信息,如:端口当前状态保持时间= sysUpTime- ifLastChange、接口输入流量=ifInOctets*8/sysUpTime、接口输出流量=ifOutOctets*8/sysUpTime等。具体代码如下:
#define SYSUPTIME“

1.3.6.2.3.0”// 系统运行时间

#define IFSPEED “

1.3.6.2.2.2.5” // 接口带宽

#define IFLASTCH“

1.3.6.2.3.0”//最后一次状态改变的时间

#define IFINOCTERS“

1.3.6.2.2.2.10”//接口接收的总总字节数

#define IFOUTOCTERS“1.3.6.1.2.1.2.2.16”//接口接收的总总字节数void get_system_group(){
int status;
CTarget ctarget( (IpAddress) “10.

4.8.5”); Vb vb[5]; Pdu pdu;

Snmp snmp( status);
if ( status != SNMP_CLASS_SUCCE摘自:毕业论文翻译www.7ctime.com
SS)
return;
vb[0].set_oid(SYSUPTIME); vb.set_oid(IFSPEED);
vb.set_oid(IFLASTCH);
vb[3].set_oid(IFINOCTERS);
vb[4].set_oid(IFOUTOCTERS); for ( int z=0;z<5;z++)
pdu += vb[z];
if ((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)
cout << snmp.error_msg( status); else{
pdu.get_vbs( vb,5);
for ( int w=0;w<5;w++)
cout < 3 Agent++应用开发

3.1 Agent++主要功能模块

Agent++扩展了SNMP++的基本概念,支持SNMP管理站和SNMP的开发的一套C++类,它提供了完整的协议引擎和调度支持,同时,它也提供了对委托和发送通知消息的C++类支持。Agent++按照功能划分可用分为4个模块:通信模块、消息处理模块、操作定位模块和信息库管理模块。

3.2 Agent++开发实例

Agent++类集合中包含了Mib、MibGroup、MibTable、MibTableEntry、Mibleaf、Snmpx、Pdux、Vbx和Oidx类。对于使用Agent论文导读:=snmp->notify_register(trapids,targets,&my_trap_callback))!=SNMP_CLASS_SUCCESS)couterror_msg(status);}}4网络管理设备中SNMP的配置信息配置网管的一些基本信息,例如:管理站地址、读写社团名和是否允许接收和发送trap等。当然对应不同的网络节点设备,配置方式也有很大的区别,甚至相
++进行SNMP端的开发而言,我们所要处理的就是端信息库的维护,而SNMP组、系统组、通知组以及其它标准的MIB组,都已经在Agent++中建立了。当然,根据用户的需要,用户可用从这些组中派生来MIB组,例如,通过SNMP++无法支持获取网络节点的内存使用率和CPU使用率等信息,因为MIB库里没有这样的Oid,那么,我们在网络节点中建立自己的MIB组,在其中实现内存使用率和CPU使用率等功能,这样在用Ageng++开发时,添加系统组MIB和自己定义的MIB组的支持,这样就可用完成MIB库在中的扩充,从而我们可用在这些端的信息库中进行存储和读取了。具体实例如下:
3.

2.1 发送陷阱

对于使用Agent++进行SNMP端的开发而言,常常用到一种方式就是陷阱,它不仅提供网络的故障信息,还可以提供网络安全和性能信息。对支持SNMP网络节点设备来说,通常会设定好很多种类的陷阱,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss和enterpriseSpecmc类型,一旦触发它,就会发出SNMP报文,如设备的端口故障、启动、关闭等状态改变后就会触发trap,只要设置节点设备的配置即可,如对交换机设置而言,要设置团体读写方式、是否允许发送陷阱以及发送陷阱的具体方向等。这样在SNMP管理端就可以接收到陷阱了。当然,我们也可自己制定陷阱的类型,例如软件启动和退出时自动发送陷阱来通知管理端。这里值得注意的是,在发送trap前要设置好发送的目标地址,同时也要为每个trap设定自己的Oid,来区分其它消息和陷阱,这样调用SNMP会话的trap函数就可以发trap送了,具体实例如下所示:
#include “snmp_pp.h”
void send_trap()
{
Snmp::socket_startup();
int status;
UdpAddress address( “25

5.2525255” ); CTarget target( address );

target.set_version(version2c);
Snmp snmp(status);
if (SNMP_CLASS_SUCCESS != status)
return true;
Pdu pdu;
Vb vb;
vb.set_oid( “103” );
Oid oid = theOid;
pdu.set_notify_id( oid );
pdu.set_notify_enterprise(“103”);
status = snmp.trap( pdu, target );
if (SNMP_CLASS_SUCCESS != status){ printf( “trap Send Error:%s\n”, snmp. error_msg(status) );
}
Snmp::socket_cleanup();
if (SNMP_CLASS_SUCCESS != status)
return false;
return true;}
3.

2.2 接收陷阱

中的Trap是自动发送的,而Trap的接收和解析需要程序来实现。接收陷阱既可以放在管理端来处理,又可以在被管理设备中来处理。在接收到陷阱后,根据不同的陷阱情况做出相应的反应。在接收陷阱时主要通过SNMP会话调用notify_register注册函数来唤起回调函数,从而对各种陷阱进行相应的处理。具体实例如下所示:
voidmy_trap_callback(intreason,//陷阱类型
Snmp*session,// snmp会话句柄Pdu & pdu,// 陷阱pdu TimeTicks ×tamp,// 时间戳
SnmpTarget &target,// 陷阱的目标void * cbd)
{
Address *address;
unsigned char get_cummunity[80], set_community[80];
unsigned long timeout;
int retry;
if ( reason == SNMP_CLASS_TRAP) {
target.resolve_to_C( get_community,// 获取团体名
set_community, // 设置团体名&address,// 目标地址timeout,// 超时设置retry); // 重试设置cout << "Trap Received from << "Trap Id = " << trapid.get_printable();}
else
cout << "Trap Receive Error = " };
Snmp *snmp;
void trap_register(){
int status;
snmp = new Snmp( status);
if (( snmp == NULL) || ( status != SNMP_ CLASS_SUCCESS))
cout << "Error constructing Snmp Object\n"; else{
TargetCollection targets;
OidCollection trapids;
if ( status = snmp->notify_register(trapids, targets, & my_trap_callback))
!= SNMP_CLASS_SUCCESS)
cout << " Snmp Trap Register Error " }}
4网络管理设备中SNMP的配置信息
配置网管的一些基本信息,例如:管理站地址、读写社团名和是否允许接收和发送trap等。当然对应不同的网络节点设备,配置方式也有很大的区别,甚至相同的设备也存在版本上的区别。论文导读:支持SNMP协议,即在系统组件中安装管理和监视工具组件即可;对应交换机、HUB和路由器而言,不同厂家的设备具体配置有很大差别,但基本方式是设置团体名和访问权限、设置SNMP版本、设置对trap的支持和设置trap发送的目的地址等。5结束语随着网络技术的发展,SNMP成为管理网络设备的简单而有效的方法。本文主要介绍了网
对应工作主机和服务器来说,只需要支持SNMP协议,即在系统组件中安装管理和监视工具组件即可;对应交换机、HUB和路由器而言,不同厂家的设备具体配置有很大差别,但基本方式是设置团体名和访问权限、设置SNMP版本、设置对trap的支持和设置trap发送的目的地址等。
5结束语
随着网络技术的发展,SNMP成为管理网络设备的简单而有效的方法。本文主要介绍了网络管理系统中SNMP的开发与实现,并通过实例简单介绍基于SNMP++和Agent++的开发。
参考文献:
HP公司,SNMP++文档
Frank Fock,The Code Generator For AGENT++
[3]Banker Kim, Mellquist Peter E., SNMP++, Connexions, The Interoperability Report,Volume 9,No. 3, March 1995.
[4]王朋武,WinSNMP API规范.
[5]岑贤道,安常青.网络管理协议及应用开发[M].清华大学出版社,1998.