netsnmp软件包的应用.docx

上传人:b****6 文档编号:5281450 上传时间:2022-12-14 格式:DOCX 页数:25 大小:226.64KB
下载 相关 举报
netsnmp软件包的应用.docx_第1页
第1页 / 共25页
netsnmp软件包的应用.docx_第2页
第2页 / 共25页
netsnmp软件包的应用.docx_第3页
第3页 / 共25页
netsnmp软件包的应用.docx_第4页
第4页 / 共25页
netsnmp软件包的应用.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

netsnmp软件包的应用.docx

《netsnmp软件包的应用.docx》由会员分享,可在线阅读,更多相关《netsnmp软件包的应用.docx(25页珍藏版)》请在冰豆网上搜索。

netsnmp软件包的应用.docx

netsnmp软件包的应用

NET-SNMP软件包应用

1SNMP协议简介1

1.1网络管理协议结构2

1.2管理信息库5

1.3SNMP的版本6

2SNMP开发软件包6

3net-snmp软件包简介   6

3.1NET-SNMP简介和安装6

3.2NET-SNMP代理的配置7

3.3NET-SNMP工具的使用7

4用net-snmp软件包扩展代理---linux服务器9

4.1NET-SNMP中的scalar对象和table对象9

4.2NET-SNMP扩展代理的两种方式(转)9

4.3自定义MIB扩展流程(Linux服务器上)10

4.4自定义MIB11

4.5代理扩展实例——简单变量的实现12

4.6代理扩展实例——表对象的实现13

a)mib.iterator.conf模版的实现(转)13

b)mib.iterator_access.conf模版的实现(转)15

4.7代码的合并15

4.8配置和运行16

5用net-snmp软件包扩展代理---嵌入式板端16

6Linux环境中开发中的问题与解决18

7Windows环境中开发中的问题与解决(转)19

8总结20

9附录21

9.1snmpd.conf配置文件21

9.2主函数foxmail_new.c(为调试代理而用。

我自己未调试)21

9.3简单变量实现代码---mib2c.old-api.conf22

9.4简单变量实现代码---mib2c.scalar.conf22

9.5表的实现---mib2c.mfd.conf22

1SNMP协议简介

作为一个完备的系统,必须有一套反馈机制来调整系统的运行。

简单网络管理协议产生的目的,就是为了使松散的网络更加有效地运行。

它广泛的应用于监测网络的状态、网络设备的运行情况、各种电脑设备以及一些辅助的外围设备,使得网络管理员通过对节点的查询和设置,发现并定位故障,进而采取相应措施维护网络。

网络管理的研究已经发展了许多年,对于日益纷繁的需求,简捷性和扩展性仍是研究的主题。

本文中协议相关资料可以参考RFC文档:

RFC1155:

StructureandIdentificationofManagementInformationforTCP/IP-based

Internets

RFC1157:

SNMP

RFC1212:

ConciseMIBDefinitions

RFC1215:

AConventionforDefiningTraps

RFC1905:

ProtocolOperationsforSNMPv2

RFC2011:

SNMPv2ManagementInformationBasefortheInternetProtocolusingSMIv2

RFC2578:

StructureofManagementInformation

RFC2579:

TextualConventions

RFC2580:

ConformanceStatements

1.1网络管理协议结构

SNMP的网络管理模型包括以下关键元素:

管理端、代理端、管理信息库、网络管理协议。

它基于tcp/ip协议,属于应用层协议,通过udp协议通信。

管理端与代理端的通信原语包括:

Get,Getnext,Set,Trap。

在udp数据包中,发送信息是按ASN.1自解释方式编码的。

但对于许多小型被监管设备,可能会运行不同协议,或者运行完整代理花费很大,于是产生了代管设备,主代理和子代理的概念。

在小型设备上运行子代理,把数据发给主代理来完成snmp协议的通信。

网管基本模型

交互操作图

图中数字:

1-----GetRequest2-----GetNextRequest3-----SetRequest

4-----GetResponse5-----Trap

嵌入式Agent软件结构

1.2管理信息库

SNMP以MIB(管理信息结构)为基础来描述被监管资源,由此建立的数据集和称之为MIB库。

(它实质上就是制定格式的文本文件。

)它是一种树型结构的数据库,被监管的对象都处于叶子节点上。

每个被监管对象都由一个唯一的对象标识符来识别。

对象信息的存储结构由MIB定义的简单变量和表来构造,它一般包含描述名(对象标识符)、数据类型、读写规则、功能描述、状态。

MIB的定义可以查询RFC1155,它定义了四种基本数据类型:

INTEGER,OCTETSTRING,OBJECTIDENTIFIER和NULL。

由这四种基本类型通过SEQUENCE构造列和表,以及新类型如:

NetworkAddress、IpAddress、Counter、Gauge、TimeTicks、Opaque等,以及宏定义。

当然,根据需要还可以构造自己的数据类型。

1.3SNMP的版本

目前SNMP有三个版本snmpV1、snmpV2、snmpV3。

针对原始的V1版,93版的v2加入了安全机制,但用户对其并不感兴趣,在96版的v2中又删除了安全机制,99年开始酝酿的v3版开始提出一个snmp的统一架构,采用User-based安全模型和View-based访问控制模型提供SNMP网络管理的安全性。

安全机制是SNMPv3的最具特色的内容。

2SNMP开发软件包

目前,开发SNMP的软件包有许多可以选择如SNMP++、AGENT++、NET-SNMP等。

SNMP++是基于C++的,一般多用于windows。

这里我们选用的是NET-SNMP。

它是一个开源软件,基于C语言开发,便于移植。

ucd-snmp源自于卡耐基.梅隆大学的SNMP软件包CMUsnmp2.1.2.1,由加州大学Davis分校(UniversityofCaliforniaatDavis)开发与维护,所以命名为ucd-snmp。

2000年11月ucd-snmp项目转到由SourceForge()管理,并更名为net-snmp。

3net-snmp软件包简介   

3.1NET-SNMP简介和安装

net-snmp早先是在Unix平台下开发的。

现可以移植到:

HP-UX(10.20to9.01and11.0)

Ultrix(4.5to4.2)

SolarisSPARC/ULTRA(2.8to2.3),Intel(2.9)andSunOS(4.1.4to4.1.2)

OSF(4.0,3.2)

NetBSD(1.5alphato1.0)

FreeBSD(4.1to2.2)

BSDi(4.0.1to2.1)

Linux(kernels2.4to1.3)

AIX(4.1.5,3.2.5)

OpenBSD(2.8,2.6)

Irix(6.5to5.1)

OSX(10.1.1and10.1.2)

Dynix/PTX4.4

QNX6.2.1A

Windows

等多个平台。

Net-snmp是一个代理端软件,但也提供管理端的查询工具。

安装有两种方式:

一是直接安装的二进制包,二是需要编译的源代码。

我们在windows平台上安装的二进制包,在虚拟Unix平台CygWin上编译安装的源代码。

在windows上的二进制包的安装非常简单,只需按提示就可完成。

源代码和二进制包可从-snmp.org/网站下载。

之所以要先安装一个可运行的net-snmp系统,是因为我们开发程序运行环境的配置文件,是按照默认安装路径内部设定搜索的;另外,还可以利用其提供的配置工具来生成配置文件,利用提供的查询工具来测试程序。

Linux上的安装流程:

---------------------------------------------------------------------------

tar-xvfnet-snmp-5.4.1.tar

cdnet-snmp-5.4.1

./configure

make

makeinstall

(修改snmpd.conf配置文件:

/usr/local/etc/snmp/snmpd.conf参见【附录】)

snmpd

ps-aef|grepsnmpd

3.2NET-SNMP代理的配置

运行net-snmp之前先要进行环境设置,否则无法查询到结果。

环境配置文件由snmpconf命令交互生成。

运行snmpconf后,提示有三个配置文件:

snmpd.conf,snmptraps.conf,snmp.conf。

其中:

⏹snmpd.conf用来配置代理和管理端通信时的参数,只需设置两个参数就可正常运行程序了,一是communityname,有只读rocommunity和读写rwcommunity之分,相当于访问账号,这里设rocommunity为public;另一个是访问端口,设为snmp协议默认的161端口。

⏹Snmp.conf是与mib库设置相关的配置文件。

⏹Snmptraps.conf用来设置代理陷阱。

另外,snmpconf和mib2c工具都是基于perl脚本的,在windows下需要安装perl才能运行。

按照帮助文档的提示,下载ActivePerl安装。

并按照帮助文档中perl的安装要求,下载在win32环境下所需的其他组件,配置并测试perl模块,使snmpconf和mib2c能正常运行。

3.3NET-SNMP工具的使用

当环境设置好后,运行snmpd,即snmp代理进程,就可以使用管理工具查询其中的信息了。

Net-snmp提供的查询工具有很多,大部分查询命令的格式都大同小异。

这里以.iso.org.dod.internet.mgmt.mib-2.system为例,其Oid为:

.1.3.6.1.2.1.1。

结构如下:

………system.1.3.6.1.2.1.1

|——sysDescr.1.3.6.1.2.1.1.1

|——sysObjectID.1.3.6.1.2.1.1.2

……

⏹snmpget——snmpget[OPTIONS]AGENTOID[OID]...用来查询叶子节点

实例:

snmpget–v2c–cpubliclocalhost.1.3.6.1.2.1.1.5.0

snmpget–v2c–cpublic192.168.12.77.1.3.6.1.2.1.1.5.0

snmpget–v2c–cpublic127.0.0.1.1.3.6.1.2.1.1.5.0

说明:

-v2c:

使用的是2c的snmp版本,可选1|2c|3

-cpublic:

community名为public

localhost:

代理的地址,若代理运行在本机上,所以可用localhost

⏹snmpgetnext.exe——snmpgetnext[OPTIONS]AGENTOID[OID]...通过父节点查询叶子节点

实例:

snmpgetnext–v2c–cpubliclocalhost.1.3.6.1.2.1.1

说明:

这个命令假设不知道叶子节点,但知道父节点,则可遍历到第一个叶子节点。

此例结果等同于上一个例子。

Oid也可输入.1.3.6.1.2,因为它是按字典顺序遍历的。

⏹snmptable.exe——snmptable[OPTIONS]AGENTTABLE-OID用来查询表对象

实例:

snmptable–v2c–cpubliclocalhost.iso.org.dod.internet.mgmt.mib-2.ip.ipAddrTable

⏹snmpwalk

实例:

snmpwalk-v1192.168.12.77-cpublicucdDemoPublic

⏹snmpset.exe——snmpset[OPTIONS]AGENTOIDTYPEVALUE[OIDTYPEVALUE]...修改数据

实例:

snmpset–v2c–cpubliclocalhost.1.3.6.1.2.1.4.21.1.3.xi99

说明:

x:

在这里是索引值,表示表项中某一列的第几个数据,根据要求设定

i:

这里是列数据类型,包括i:

INTEGER,u:

unsignedINTEGER,t:

TIMETICKS,

a:

IPADDRESSo:

OBJID,s:

STRING,x:

HEXSTRING,

d:

DECIMALSTRING,b:

BITSU:

unsignedint64,

I:

signedint64,F:

float,D:

double

⏹mib2c用来把mib库文件编译成.c和.h模版。

实例:

mib2ct1Table

mib2c-cmib2c.scalar.conflianyiPublic

mib2c-cmib2c.old-api.conflianyiPublic

mib2c-cmib2c.mfd.conflyTable

mib2c-cmib2c.genhtml.confifTable//生成mib文件的html格式

说明:

Whenyourunmib2c,youmustspecifyaMIBnodeforittoprocess.Youcanalsospecifywhichconfigurationfileyouwouldlikeittousetogeneratethecode.Theavailableoptionsare:

mib2c.int_watch.conf

mib2c.old-api.conf//scalar的ucd-snmp选项所用;

mib2c.scalar.conf//scalar的net-snmp选项所用;

mib2c.array-user.conf//

mib2c.create-dataset.conf//TableData在agent里;

mib2c.iterate.conf//TableData在外部时;

mib2c.iterate_access.conf//

mib2c.mfd.conf//

mib2c.notify.conf//(内容极简单,无采用价值)

mib2c.genhtml.conf模板:

生成mib文件的html格式

4用net-snmp软件包扩展代理---linux服务器

在利用net-snmp做扩展之前的准备工作是,一下载源代码,二编译出库文件:

netsnmpagent.lib、netsnmphelpers.lib、netsnmpmibs.lib、netsnmp.lib。

这四个库的工程文件都位于~\net-snmp-5.2.1.2\win32\下对应的文件夹中。

编译库文件时注意把netsnmp.lib放到最后编译,它可能会参考一下前面的编译文件。

本文档中实现的代理程序,在源代码包中只需要引用这四个库文件。

开发工具VC6.0的环境设置也需要注意,参考帮助文档readme.win32,设置好include目录,library目录。

在project\configure的选项link的相关栏目中添加上四个库文件,还要加上wsock32.lib库。

另外,在程序编译过程中会碰到与VC的默认库相冲突的地方,按提示在上述添加库的地方加上/NODEFAULTLIB:

XXX.LIB来除去默认库。

代理的开发过程基本上遵循:

mib模块→转换成C文件→编译进代理中。

4.1NET-SNMP中的scalar对象和table对象

mib模块一般都由变量和表组成。

因此Net-snmp把SMI中的对象分为两大类:

scalar和table。

Scalar就包含我们常用的整型,字符串,时间等等数据类型。

table就是scalar的一种集合,有一个和多个列组成,类似于数据库中的表。

它必须具有索引项,用来按一定顺序检索表项。

Mib2工具通过模版把mib文件解析成.c和.h文件,这些文件仅仅是半成品,还需要手工在相应地方添加相应代码。

Mib2c有很多模版,可以根据相应需要来调用不同的模版。

但mib2c目前不支持同时解析scalar和table对象,对于具有这两种对象的mib模块,需要分别生成代码文件,然后再合并成整体。

4.2NET-SNMP扩展代理的两种方式(转)

用net-snmp扩展代理,实现方式可归结为两种:

一是静态库方式,通过修改配置头文件,在相应地方包含新引入的mib模块的.c和.h文件,然后重新编译库文件和代理程序;

二是编译动态共享库,只需把新引入的mib模块的.c和.h文件编译成动态库,通过设置能够让代理程序载入。

对于第二种方式,一需要编译成.so动态共享库,二需要原代理程序是否包含dlmod或load命令,三还要看系统是否支持。

一般情况下仅支持Unix平台。

我们在CygWin下试验过Unix平台编译。

在VC下的编译环境,基本上都是参考其makefile,configure等文件。

第一种方式允许我们在原有mib库上添加新的mib模块,也可以只针对需要的mib模块编译单独的程序。

源代码包中的代理程序工程文件位于~\net-snmp\win32\snmpd下,因为它可移植到多个平台,主程序代码中有许多平台开关,和各种选项,非常庞大。

为了简化开发和调试,我们使用了一个帮助文档中介绍的简化的代理端程序框架。

这个框架非常精简,在性能上可能比原版差很多,但用来测试和开发mib库就比较高效了。

程序的运行机制:

程序启动,载入初始化mib模块,然后进入一个等待呼叫的无限循环,代码片段如下:

……

init_MyMib();

……

while(keep_running)

{

/*ifyouuseselect(),seesnmp_select_info()insnmp_api(3)*/

/*---OR---*/

agent_check_and_process

(1);/*0==don'tblock*/

}

我们所要做的就是实现init_MyMib()函数,即自定义的mib模块。

关于无限循环中的阻塞与否,根据mib模块而定。

如果你的应用程序需要以非阻塞方式处理SNMP数据流,就使用一步接口(例如GUI、线程、forking等)。

否则,只需要使用同步接口就可以了。

在阻塞模式下,程序会占用大量cpu资源。

具体实现可参见例子:

【附录7.1】

下面以Linux下的为例分析;

4.3自定义MIB扩展流程(Linux服务器上)

实现步骤如下:

1)定义MIB文件

⏹按照SMIV2的语法来定义描述被管理对象的MIB文件:

***.txt;也使用MG-SOFT公司的”VisualMIBBuilder”可视化设计软件完成MIB库模块的定义;

⏹注意事项

◆注意表名必须为“***Table”,实体名应该为“***Entry”;(因为在实践过程中发现若名称不符合,mib2c不能正常执行;)

◆Mib文件中用到的数据类型注意要在IMPORTS中包含到;(若没包含到,便认为是不合理的类型)

2)利用mib2c生成C代码文件

⏹MIB库模块定义后,需要在代理程序中增加与所定义的MIB库模块相对应的源代码;用mib2c工具程序把MIB库模块文件转换成C源代码。

执行流程:

1.把设计好的MIB库文件(***.txt)拷贝到net-snmp源代码的mibs目录(如:

/usr/local/share/snmp/mibs);

2.exportMIBS=ALL//export是设置mib2c后对象名的查找范围。

上面设置表示在mibs目录下查找所有文件;

3.mib2cmodulename//modulename是要转换的对象名,不是mib文件名,也不是节点名;mib2c会在当前目录下生成modulename.h和modulename.c,这两个文件是根据所设计的mib库模块转换而成的;

注意事项:

◆Mib文件必须要存放到mib库中:

/usr/local/share/snmp/mibs;

◆使用mib2c工具时,要根据需要转换的MIB定义文件来选择配置文件。

传统的MIB定义文件一般根据里面的MIB变量是普通的MIB变量还是二维表,以及MIB变量值的获取是通过外部资源还是通过agent本身,来选择不同的mib2c配置文件;

◆在做mib文件时,若有表存在,注意标明应为*Table,实体:

*Entry.因为在实际应用中发现,若表明不为Table结束的,就不能正常生成代码文件;

3)添加自己的实现代码

⏹根据不同的模板修改相应的代码;由模版生成的文件,不论是简单变量还是表对象,其整体结构都是固定模式。

在模版头文件中对节点进行宏定义,函数声明。

在模版实现文件中,分为两大块:

一是初始化函数,主要用来对变量注册;二是响应函数,用来响应管理端的查询命令,响应函数的返回值,就是我们要手工实现的。

我们所要做的工作就是把数据以一种合理的方式导入到其中。

⏹注意事项:

◆注意代码中用到的variablen其中的n值可能有误,需要根据实际修改。

有两个地方需要修改并保持一致。

4)编译调试所实现的代码

a)通过修改配置头文件,在相应地方包含新引入的mib模块的.c和.h文件,然后重新编译库文件和代理程序;

b)(先把原snmpd关闭并卸载)

c)./configure-with-mib-modules="lyTablelianyiPublic"//

d)make

e)makeinstall

f)cd/usr/local/sbin/

g)./snmpd-Lf/var/log/snmpd.log–DALL//打印信息到日志文件snmpd.log

4.4自定义MIB

这里我们定义了一个私人节点的MIB,位于节点.iso.org.dod.internet.private.enterprises下,数字Oid为:

.1.3.6.1.4.1。

树型结构如下:

+--lianyiMIB(32189)(.1.3.6.1.4.1.32189)

|

+--lianyiMIBObjects

(1)

|

+--lianyiPublic

(1)

|

+---RW-Integer32s1

(1)

|Range:

0..2147483647

+---RW-Strings2

(2)

|Size:

0..1024

+---R--Strings3(3)

+---R--Strings4(4)

|

+--lyTable(5)

|

+--lyEntry

(1)

|Index:

lyIndex

|

+---R--Integer32lyIndex

(1)

+---R--StringlyDescr

(2)

|TextualConvention:

DisplayString

|Size:

0..

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

当前位置:首页 > 农林牧渔 > 农学

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

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