APP下载

基于Linux环境的简单网络管理协议的实现

2010-09-25徐国辉

通信技术 2010年7期
关键词:管理站网络设备网络管理

徐国辉

(广州工程技术职业学院,广东 广州 510075)

0 引言

Linux是一种开放源代码、协作开发的类UNIX,但同其他的UNIX操作系统相比又非常小。它是一种真正多用户、多任务的操作系统。该系统功能完善,可以运行在多数硬件平台上,其紧凑高效的内核能够充分发挥硬件的作用,同时对网络功能提供了广泛的支持[1-2]。 网络管理的主流技术主要是SNMP和公共管理信息协议(CMIP),SNMP的特点是简单,应用广泛;CMIP的特点是规范,全面和复杂。

Linux系统集成了强大的网络UCD SNMP管理技术。首先详细论述SNMP网络管理理论基础,并以Linux操作系统为例,深入剖析基于Linux内核,用C语言实现SNMP网络管理协议的原理。

1 简单网络管理协议SNMP

1.1 概述

SNMP为网络管理系统提供了底层网络管理的框架。SNMP协议的应用范围非常广泛,诸多种类的网络设备、软件和系统中都有所采用,主要是因为SNMP协议有如下几个特点:

① 相对于其它种类的网络管理体系或管理协议而言,SNMP易于实现。SNMP的管理协议、MIB及其它相关的体系框架能够在各种不同类型的设备上运行,包括低档的个人电脑到高档的大型主机、服务器、及路由器、交换器等网络设备;

② SNMP协议有很多详细的文档资料,网络业界对这个协议也有着较深入的理解,这些都是 SNMP协议近一步发展和改进的基础;

③ SNMP协议可用于控制各种设备。比如说电话系统、环境控制设备,以及其它可接入网络且需要控制的设备等,这些非传统装备都可以使用SNMP协议。

1.2 SNMP基本原理

SNMP采用了Client/Server模型的特殊形式:代理/管理站模型[3]。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。

SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图1。

图1 数据报结构

(1)版本识别符

确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。

(2)团体名

用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息。

(3)协议数据单元

其中PDU指明了SNMP的消息类型及其相关参数。

1.3 管理信息库MIB

IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。

1.4 SNMP的五种消息类型

SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap。

SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生。

2 SNMP网络管理协议的实现

2.1 系统实现

Manager为 LINUX 操作系统平台(放置编写的简单的SNMP 应用软件),Agent为具有 SNMP 代理的设备。在Manager端利用C 语言和SNMP 协议编写一个简单的应用程序(可以发送 GET GET-NEXT SET 等命令),对放在网络各处的安装了 SNMP 代理的设备进行查询。在 SNMP 协议中,Manager端和Agent端的通信是通过SNMP协议数据单元实现的它们之间可以有三种类型的交互:

① Manager端执行GET 或GET-NEXT 操作从代理A获得信息;

② Manager端执行SET 操作对代理A的属性进行设置;

③ 代理 Agent端向Manager端发送陷阱异步通知信息告诉管理者关于自己的一些事件。

2.2 SNMP 网络管理协议的Get-Request 操作的实现[4-5]

程序的流程包括建立传输信息的对话结构,构造 PDU并给其赋值,发送 SNMP 协议包,检查响应信息,具体的主要代码如下:

#include "snmp.h"

int snmp_dump_packet = 0;

main(argc, argv)

int argc;

char *argv[];

{

struct snmp_session session, *ss;

struct snmp_pdu *pdu, *response;

struct variable_list *vars;

int arg;

char *gateway = NULL;

char *community = NULL;

int count, current_name = 0;

char *names[128];

/*命令和参数的读取和分析*/

for(arg = 1; arg < argc; arg++){

if (argv[arg][0] == '-'){

switch(argv[arg][1]){

case 'd':

snmp_dump_packet++;

break;

default:

printf("invalid option: -%c ", argv[arg][1]);

break;

}

/*构造会话信息*/

/*打开会话*/

ss = snmp_open(&session);

if (ss == NULL){

printf("Couldn't open snmp ");

exit(-1);

}

/*构造PDU*/

pdu = snmp_pdu_create(GET_REQ_MSG);

for(count = 0; count < current_name; count++){name_length = MAX_NAME_LEN;

if (!read_objid(names[count], name, &name_length)){

printf("Invalid object identifier: %s ",names[count]);

}

snmp_add_null_var(pdu, name, name_length);

}

retry:

/*发送会话信息并等待响应信息*/

status = snmp_synch_response(ss, pdu, &response);

if (status == STAT_SUCCESS){

if (response->errstat == SNMP_ERR_NOERROR){for(vars = response->variables; vars; vars =vars->next_variable)

print_variable(vars->name, vars->name_length, vars);

} else {

printf("Error in packet. Reason: %s ",snmp_errstring(response->er rstat));

if (response->errstat == SNMP_ERR_NOSUCHNAME){printf("This name doesn't exist: ");

for(count = 1, vars = response->variables; vars &&count != resp

onse->errindex;

vars = vars->next_variable, count++)

}

/*清除PDU 关闭对话*/

if (response)

snmp_free_pdu(response);

snmp_close(ss);

}

3 结语

Linux操作系统正逐渐为商业界、学术界、自由软件世界所关注,作为一个成熟的操作系统,它的特征、功能、性能日趋完善。随着Linux操作系统在中国的普及,需要了解和掌握它的强大的网络功能。在阐述Linux的网络管理理论基础上,着重Linux的SNMP网络管理技术原理的剖析,同时用C语言在Linux环境中实现SNMP的部分功能,以加深对Linux网络功能的认识和理解。

[1] 陈向阳,方汉.Linux实用大全[M].北京:科学出版社,1999.

[2] 博韦,西斯特.深入理解LINUX内核[M].北京:中国电力出版社,2007:9.

[3] 毛期俭,陈恒志,肖寒春.一种基于SNMP的中间网络管理系统解决方案[J].通信技术,2007,40(11):225-227.

[4] 王粉花.基于Linux字符设备驱动程序的设计与实现[J].计算机工程,2006(12):278-280.

[5] 郗延华,徐钊,杨莹.基于嵌入式Linux系统TDMoIP的实现[J].通信技术,2007,40(11):230-233.

猜你喜欢

管理站网络设备网络管理
网络设备的安装与调试课程思政整体设计
数控机床DNC网络管理平台在智能制造中的应用
一种基于C# 的网络设备自动化登录工具的研制
宿迁市救助管理站:小团队如何撬动大社会
大连市救助管理站:多个“第一”背后的秘密
基于OpenStack虚拟化网络管理平台的设计与实现
电动汽车充电服务网络管理初探
防范加固SNMP团体名漏洞
基于EOC通道的SHDSL网络管理技术
托起救助之责 谱写青春赞歌——记河南省安阳市救助管理站站长许帅