Net-SNMP之编写MIB文件

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_41025517/article/details/84569529

在Net-SNMP开发中,编写MIB文件是一项重要的环节。一般来说,一个标准的MIB文件主要由以下几个部分组成。

一、模块声明部分

所有的MIB文件都需要以DEFINITIANS关键字开始,以END结束。在这两者之间是需要定义的节点主体。模块声明部分的使用如下:

XXX-MIB DEFINITIONS ::= BEGIN
......
END

需要注意的是,在写MIB文件时,XXX-MIB是MIB的名字,该MIB文件一般命名为XXX-MIB.txt。在将该MIB进行编译安装时,命令行里需要用的正确格式是XXX-MIB::xxx

二、模块引用部分

该部分主要声明导入其他模块,尤其是标准模块中定义的数据类型、宏等。除了基本的数据类型外,其他情况下,只有导入相关的数据类型,才可以在本模块中使用。具体而言,该部分利用IMPORTS标识,所有的模块引用及群组引用均使用关键字FROM说明其出处,最后以分号结束。
示例

IMPORTS
    PhysAddress, TruthValue, RowStatus,
    TimeStamp, AutonomousType, TestAndIncr   FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP                       FROM SNMPv2-CONF
    snmpTraps                                FROM SNMPv2-MIB
    IANAifType                               FROM IANAifType-MIB;

三、模块标识部分

该部分必须紧跟在模块引用部分之后,使用关键字MODULE-IDENTITY描述该模块的详细信息。模块有更新时可以用关键字REVISION描述,以方便后续开发。
示例

exampleMIB MODULE-IDENTITY
    LAST-UPDATED "201811201132Z"   --必须以Z为结尾,格式为“年月日时分+Z”
    ORGANIZATION "www.XXXX.com"
    CONTACT-INFO    
         "postal: Chenshi
          email:xxx@xxx"                 --该部分有“”
    DESCRIPTION
         "For example."                  --该部分有“”
    REVISION     "201811271533Z"
    DESCRIPTION
         "For example."                  --该部分有“”
     ......
    ::= { exampleModuleIDs 6 }

四、对象标识部分(分配OID空间)

该部分用关键字OBJECT IDENTIFIER声明,它的主要功能是用来将具有同一类功能的对象结合起来,建立并规划整个MIB中的OID分支。
示例

XXXX OBJECT IDENTIFIER ::= { exampleMIB 156 }

XXXX是一个子树支,它定义在exampleMIB分支下,“156”是XXXX在exampleMIB分支下的唯一对象标识符。

五、标量对象定义部分

MIB中提供了两种类型的管理对象,一种是标量对象,一种是表格对象。标量对象指的是该对象在运行期间只有一个实例值的对象,而表格对象指的是在运行过程中有多个实例值的对象。注意,对象和对象实例是两个概念。
假设标量对象对应的标识符是OID_A,那么该对象的实例标识符表示为OID_A.0,获取该对象实例的PDU中传递的就是OID_A.0
标量对象利用关键字OBJECT-TYPE定义。
示例

objectName OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "This is a simple object.  
         This example object is implemented in the xxx."
    ::= { netSnmpExampleScalars 1 }

各关键字的说明如下:

关键字说明
objectName被管对象的名字,必须以小写字母开头
OBJECT-TYPE该部分的关键字
SYNTAX被管理对象类型的关键字,如Interger(整数)、Gauge(标准)、NetworkAddress(网络地址)、IpAddress(Ipv4地址)、Counter(计数)、DisplayString(显示字符串)、TimeTicks(时间戳)等
MAX-ACCESS该对象支持的访问方式,有read-only、read-only(只读)、read-write(读写)、read-create(读和创建)、no-accessible(不可访问)四种
STATUS该对象的状态,有current (当前的)、deprecated (反对的)、obsolete(废弃的)三种
DESCRIPTION对被管理对象的功能、特征等进行描述的关键字

六、表格对象定义部分

该部分关键字有两个:SEQUENCESEQUENCE OF
(1)表格对象可以看成是一些标量对象的集合,使用SEQUENCE将这些标量对象按序列的方式组合起来。每个标量对象在表内又可称为列对象。
(2)SEQUENCE OF定义表格中的行对象。
(3)将概念行作为概念表的语法类型,定义概念表,即表格对象。一般情况下,表格对象的名字后面应加上“Table”后缀,行对象的名字后面应加上“Entry”后缀,以示区分,方便后期修改开发。

示例

--定义概念表
exampleTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF ExampleEntry
    MAX-ACCESS  not accessible
    STATUS      current
    DESCRIPTION
::={ root 1 }
--定义概念表中的概念行
exampleEntry OBJECT-TYPE
    SYNTAX      ExampleEntry
    MAX-ACCESS  not accessible
    STATUS      current
    DESCRIPTION
::={ exampleTable 1 }
--定义序列结构
ExampleEntry ::= 
	 SEQUENCE {
		exampleIndex       Integer32,
		exampleString      DisplayString,
		......
		columnN            columnNtype
	 }
--定义exampleIndex、exampleString......
--定义方式和第五部分相同
exampleIndex OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
    ::= { exampleEntry 1 }        --父节点是行对象
关键字说明
exampleTable表格名,xxxxTable,Table首字母大写
exampleEntry行对象实例,和ExampleTable相同,但是后者首字母大写
ExampleEntry行对象名,XxxxEntry,首字母大写,Entry首字母大写
MAX-ACCESS此处必须是not-accessible
DESCRIPTION描述信息字段

七、Trap对象定义部分(可选)

该部分为可选部分,使用关键字NOTIFICATION-TYPE或者TRAP-TYPE定义模块中的Trap对象。

TRAP-TYPE示例

exampleA  MODULE-IDENTIFY
		......
		::={ enterprises 1000 }
exampleAMgmt  OBJECT IDENTIFIER
		......
		::={ exampleA 12 }
exampleAMgmtMIB  OBJECT IDENTIFIER
		......
		::={ exampleAMgmt 123 }
exampleAFailNotif  TRAP-TYPE
		ENTERPRISE exampleAMgmtMIB
		VARIABLES { exampleAPort }
DESCRIPTION
      ::={ root 1 }

NOTIFICATION-TYPE示例

......
example NOTIFICATION-TYPE
OBJECTS  {exampleObject}
STATUS  current
DESCRIPTION  "."
::= { xxxxx 1 }
......

一个MIB文件主要包括以上几个部分。完成MIB的编写是Net-SNMP开发的基础,要定义哪些被管对象、节点,需要提前罗列出来,从整体上去包括OID的分配。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Net-SNMP是一个用于实现SNMP(Simple Network Management Protocol,简单网络管理协议)的工具包。学习Net-SNMP主要包括以下几个方面: 1. 编译和安装Net-SNMP:首先需要下载和解压Net-SNMP的源代码,然后通过命令行进行编译和安装。 2. 编写MIB文件MIB(Management Information Base,管理信息库文件用于定义被SNMP管理的对象。你可以使用文本编辑器编写MIB文件,其中包含了对象的标识符和相关信息。 3. 转换MIB文件:将MIB文件转换成.c和.h文件,这样可以在SNMP代理中使用。可以使用工具来进行这个转换过程。 4. Agent代理工程:Agent代理是一个运行在网络设备上的软件模块,它负责收集和提供设备的管理信息给SNMP管理系统。学习Net-SNMP还需要了解如何配置和运行Agent代理工程。 5. Trap机制:Trap是SNMP的一种机制,用于报告特殊事件的发生。学习Net-SNMP时需要了解如何配置Trap机制,以便及时获得网络资源的实时监控。 总之,学习Net-SNMP主要包括编译和安装Net-SNMP编写和转换MIB文件,配置和运行Agent代理工程,以及理解Trap机制等方面。这些知识可以帮助你实现有效的网络管理软件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SNMP网管学习笔记](https://download.csdn.net/download/qiek/6674485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [net-snmp学习笔记<一> — 介绍](https://blog.csdn.net/prochsh/article/details/49888141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值