实验三MIB扩展实验实验目的:掌握MIB文件的编写用法。实验环境:centos6.6。实验软件:MIB编辑工具MG-SOFTmibbrowser&builder,Net-SNMP5.7.3。实验内容:MIB扩展的流程为:一、编写MIB文件MIB文件框架由以下内容构成:1、MIB文件的开始和结束所有的MIBfile的都以DEFINITIONS::=BEGIN关键字开始,以END结束。我们所有添加的节点均应在此之间。XXX-TEST-MIBDEFINITIONS::=BEGIN…………END2、模块引用区域在MIB开始关键字后,即是模块引用区域,利用IMPORTS标识,所有的模块引用及群组的引用均使用FROM关键字说明其出处,引用使用分号(;)结束。注:分号,英文全角分号。在一个MIBfile中,所有引用到的数据类型均应有引用。如:IMPORTSenterprisesFROMRFC1155-SMIInteger32FROMSNMPv2-SMIDisplayStringFROMSNMPv2-TC;3、MIB核心部分(对象标识,标量节点,表格对象的定义)(1)对象标识对象标识用关键字OBJECTIDENTIFIER声明,它的主要功能是用来将一类功能的对象结合起来。展开或折叠此对象标识即可展开或折叠此类功能的所有对象。在ASN.1中,对象标识符类型描述对象的抽象信息,MIB树中的每一个标号是用对象标识符描述的。例如:xxxOBJECTIDENTIFIER::={enterprises22566}xxx是一个子树支,它定义在enterprises树支下,“22566”是子树xxx在父树enterprises下的一个唯一对象标识符。(2)标量节点在每一个树支下,可以定义被管理资源的管理对象,其中一类是标量节点(直观地看象树叶的节点)。利用OBJECT-TYPE定义。其定义的句法如下:objectnameOBJECT-TYPESYNTAX(syntax)MAX-ACCESS(access)STATUS(status)DESCRIPTION(description)::={(parent)(number)关键字说明备注objectname被管理对象的名字必须以小写字母开头OBJECT-TYPE每一个叶子对象所必须的关键字syntax被管理对象类型的关键字Counter(计数)Gauge(标准)DisplayString(显示字符串)Interger(整数)TimeTicks(时间戳)NetworkAddress(网络地址)IpAddress(Ipv4地址)access该节点支持的访问方式read-only(只读)read-write(读写)read-create(读和创建)no-accessible(不可访问)status该节点的状态current(当前的)deprecated(反对的)obsolete(废弃的)description对被管理对象的功能、特征等进行描述的关键字例如:XxxxOBJECT-TYPESYNTAXDisplayStringMAX-ACCESSread-onlySTATUScurrentDESCRIPTION::={xxxx1}(2)表类型表类型是一个特殊类型的声明,表内声明的对象称为列对象,表对象可以看作是一些标量对象的集合。利用SEQUENCE和SEQUENCEOF定义表格和表格中的行,通常来说,表格对象的名字后面加有后缀Table,行对象的名字后面加有后缀Entry。其声明如下:tablenameOBJECT-TYPESYNTAXSEQUENCEOFEntrytypeMAX-ACCESSnot-accessibleSTATUScurrentDESCRIPTION(description)::={(parent)(number)}entrynameOBJECT-TYPESYNTAXEntrytypeMAX-ACCESSnot-accessibleSTATUScurrentDESCRIPTIONdescriptionINDEX{indexlist}::={(tablename)1}(Entrytype)::=SEQUENCE{(column1)(column1type),(column2)(column1type),(columnN)(columnNtype)}关键字说明备注tablename表格名xxxxTable首字母小写Entrytype表对象名XxxxEntry首字母大写not-accessible访问方式此处必须是not-accessibleentryname行名和XxxxEntry名相同,首字母小写xxxxEntrydescription描述信息举例说明:XXX-MIBDEFINITIONS::=BEGINIMPORTSenterprisesFROMRFC1155-SMIInteger32FROMSNMPv2-SMIDisplayStringFROMSNMPv2-TC;classOBJECTIDENTIFIER::={enterprises131415}SchoolOBJECT-TYPESYNTAXDisplayStringMAX-ACCESSread-onlySTATUScurrentDESCRIPTIONSchoolofclass!.::={class1}classInfoTableOBJECT-TYPESYNTAXSEQUENCEOFClassInfoEntryMAX-ACCESSnot-accessibleSTATUScurrentDESCRIPTIONThisistesttable.::={class2}classInfoEntryOBJECT-TYPESYNTAXClassInfoEntryMAX-ACCESSnot-accessibleSTATUScurrentDESCRIPTIONThisistestentry.INDEX{classInfoIndex}::={classInfoTable1}ClassInfoEntry::=SEQUENCE{classInfoIndexInteger32,cLassInfoNameDisplayString,classInfoSexInteger32,classInfoAgeInteger32,classInfoAddressDisplayString}classInfoIndexOBJECT-TYPESYNTAXInteger32MAX-ACCESSread-writeSTATUScurrentDESCRIPTION::={classInfoEntry1}zkCLassInfoNameOBJECT-TYPESYNTAXDisplayStringMAX-ACCESSread-writeSTATUScurrentDESCRIPTION::={classInfoEntry2}classInfoSexOBJECT-TYPESYNTAXInteger32{male(1),female(2)}MAX-ACCESSread-writeSTATUScurrentDESCRIPTION::={classInfoEntry3}classInfoAgeOBJECT-TYPESYNTAXInteger32MAX-ACCESSread-writeSTATUScurrentDESCRIPTION::={classInfoEntry4}classInfoAddressOBJECT-TYPESYNTAXDisplayStringMAX-ACCESSread-writeSTATUScurrentDESCRIPTION::={classInfoEntry5}END4、使用MG-SOFTMIBBuilder工具编写。(1)点击菜单File-New...,在弹出的对话框中选择version1或version2,此处选择SMIv2MIBModule2。(2)在Modulename:编辑框中输入模块名称,注意所有字母必须大写,此处输入CLASS-TEST-MIB–Apply。(3)导入父OID结点所在的mib模块,此处需要创建一个位于enterprises下的一个私有结点121314,因此需要导入enterprises所在的模块SNMPv2-SMI:点击菜单File-Import...,在弹出的模块选择框中选择MG-SOFT安装路径/SMI/SNMPv2-SMI.my,此时左边的MIB树中即可展开看到enterprises结点。(4)此时下图的MIB树中即可展开看到enterprises结点,右击Enterprises-copy。(5)在新建的CLASS-TEST-MIB对话框的根结点MIBTree上右键单击,在弹出的菜单中执行Paste命令;此时系统将提示结点不能被链接到树中,因为无该结点的父结点,是否导入所有丢失的父结点?,选择是,即可将enterprises结点导入我们的文件中;(6)新建一非叶子结点class:将右边SMIv2Components下的OBJECTIDENTIFIER拖到希望的节点如enterprises节点下,Name编辑框输入名字class,OID编辑框输入OID值121314。(7)将右边SMIv2Components下的MODULE-IDENTITY拖到节点class下,Name编辑框输入名字classMIB,OID编辑框输入OID值1,再根据需要设置其它的属性。(8)将右边SMIv2Components下的MODULE-IDENTITY拖到节点class下,Name编辑框输入希望的名字如classGroup,OID编辑框输入OID值2,再根据需要设置其它的属性。(9)将右边SMIv2Components下的OBJECT-TYPE(Scalar)拖到希望的节点如claSchool节点下,Name编辑框名字如claSchool,OID编辑框输入OID值3,再根据需要设置其它的属性。(10)新建一个表:1).将右边SMIv2Components下的OBJECT-TYPE(Table)拖到节点”class下,Name编辑框输入classInfoTable,OID编辑框输入OID值4,再根据需要设置其它的属性。需要注意的是节点名称必须以Table结尾。2).将右边SMIv2Components下的OBJECT-TYPE(Columnar)拖到上一步新建的classInfoEntry下,Name编辑框输入”classInfoIndex”,OID编辑框输入的OID值1,再根据需要设置其它的属性。3).重复第2)步加入其它列结点。4)设置classInfoEntry的index为classInfoIndex。(11)将class中叶子节点和列对象加入classGroup中:(12)预览mib文件:点击菜单File-ExportPreview(13)生成mib文件:点击菜单File-Export保存为CLASS-TEST-MIB.my文件(14)通过compiler编译CLASS-TEST-MIB.my。编译通过,则MIB文件编写成功。二、MIB文件测试1、登录centos:用户名:root;密码123456。更改IP地址(1)#vi/etc/sysconfig/network-script/if-eth0(2)输入“i”变成编辑模式:(3)将其中IPv4地址改为218.193.110.(本pcwinxp中的IP地址+50)(4)输入“ESC”退出编辑模式,输入:wq保存退出。(5)重启网卡:#servicenetworkrestart2、在winxp中通过putty远程登录centos。3、停止snmpd#ps-ef|grepsnmpd--查看snmpd进程pid。#kill-9[PID]--kill命令用于终止进程-9表示强迫进程立即停止4、拷贝文件并配置snmp.conf(1)把新的MIB文件复制到路径/usr/local/net-snmp/sha