snmp总结二:MIB语法

MIB(Management Information Base,管理信息库)是 MO(Managed Object 管理对象)定义的集合。MIB 文件是按照 ASN.1 定义的文本文件。每个管理对象都对应一个节点,并且用 OID(Object Identifier)来标识;数据管理对象对应叶子节点;所有的管理对象形成了一棵管理树。

自定义 MIB 包含的内容有:模块信息、对象定义(OBJECT TYPE,包括标量对象和表对象)、陷阱定义(TRAP TYPE)。
  1. MODULE-IDENTITY (根节点)

    模块标识符,该定义添加了一个公共的标示段来对整个信息描述块进行顶层的文字描述,也就是根节点,以加强对管理 MIB 描述块的文档管理和控制,每个 MIB 定义中都会有该定义。如:

    -- 1.3.6.1.4.1.9999 根节点

    fiberhome MODULE-IDENTITY -- 根节点,企业信息

    LAST-UPDATED "202209010000Z"

    ORGANIZATION "FiberHome, LTD."

    CONTACT-INFO

    "Postal: No.88 Hubei Province, China

    Tel: +86 xxxx

    E-mail: xxxx@fiberhome.com"

    DESCRIPTION

    "The Structure of Management Information for the FiberHome enterprise."

    REVISION "202209010000Z"

    DESCRIPTION

    "FH SNMP Start."

     ::= { enterprises 9999 }					-- assigned by IANA,尚未申请
  2. OBJECT-IDENTITY(子树)

    对象标识符,该定义用于给对象标示符的说明加上附加信息,包括状态,文字说明等,可用于对一组对象类型或一个表中几个参数的不同组合的意义的说明。如:

    myBranch OBJECT IDENTIFIER ::= { parentBranch 10 }

    其中 myBranch 是一个子树支,它定义在 parentBranch 树支下,“10”是子树 myBranch在父树支 parentBranch 下的一个唯一对象标识符,即通常所说的 OID。在 parentBranch 树支下,可以定义多个子树支,但子树支的名字和数字(如上的 10)不能重复,即必须是唯一的。

  3. OBJECT-TYPE( 叶子)

3.1 标量

exampleObject1 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Example:Integer32."
::= { exampleObject 1 } 以上的各部分解释如下: (1)exampleObject1:这是被管对象的名字,ASN.1 句法要求所有对象的名字必须以小写字母开头,而且该名字在 MIB 中必须是唯一的。OBJECT-TYPE:这是一个每一个叶子对象的所必须的关键字。 (2)SYNTAX:被管对象类型的关键字,说明随后跟着的是一个类型。被管对象的类型,ASN.1 句法要求所有的对象类型必须以大写字母开头,其中已预定义了的类型有 Counter、Gauge、DisplayString、INTEGER 等等。 (3)MAX-ACCESS:被管对象的访问方式的关键字。访问方式可为如下列举值中之一:read-only、read-write、 no-accessible,SNMP 第 2 版中又新增了 read-create。 (4)STATUS:被管对象的状态的关键字。可取的值为:mandatory 、optional、obsolete、deprecate(SNMP 第 1 版中),current、obsolete、deprecate(SNMP 第 2 版)。

status 说明

mandatory 表示该对象的状态是必备的

optional 表示该对象的状态是可选的

obsolete 使用该值使得 MIB 的某些部分标记为过时,被标记为“废弃”的对象将从现行版本中删除,并在新的 MIB版本中标记为“过时”。

current 表示该对象的状态是当前可用的

(5)DESCRIPTION:对被管对象的功能、特征等等进行描述的关键字。

(6)(::=):包含此叶子对象的树支,即叶子对象的父亲必须是用“OBJECT IDENTIFIER”声明。同时说明在此父树支下的第几个叶子对象,这个数字在此父树支下必须是唯一的。一般都是从取 1 开始的。例如:“::={ myObject 22 }”,则在 myObject 树支下 22 必须是唯一的,否则在用 MIB 编译器进行编译时会提示有错。

除此之外,还有一些关键字:UNITS、INDEX、REFERENCE、DEFVAL 等等,分别代表被管对象的单位、索引、参考、缺省值。值得注意的是 INDEX 关键字在表对象定义中必须存在的,否则表内的对象不能使用。

3.2 表类型

表类型是一个特殊类型的声明,表内声明的对象称为列对象,表对象可以看作是一些标量对象的集合。利用SEQUENCE 和 SEQUENCE OF 定义表格和表格中的行, 通常来说,表格对象的名字后面加有后缀 Table,行对象的名字后面加有后缀 Entry。

simpleTable OBJECT-TYPE
SYNTAX SEQUENCE OF SimpleEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"这是一个表名为simpleTable的表对象."
::= { exampleObject 9 } -- 1.3.6.1.4.1.9999.3.9.1
simpleEntry OBJECT-TYPE
SYNTAX SimpleEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Description."
INDEX { simpleTbColum1 }
::= { simpleTable 1 } SimpleEntry ::= SEQUENCE {
simpleTbColum1 Integer32,
simpleTbColum2 Integer32,
} (simpleTable)和(simpleEntry)中的 ACCESS 为 not-accessible,这是因为表和行对象没有叶子对象,因此不能被 SNMP 访问。ASN.1 句法中关于定义一个表的规则如下: (1) 在表名的命名中,必须要有一个“Table”关键字,例如定义一 个表对象“simpleTable” (2) 同样,在表对象下面的表格也须有一个“Entry”关键字,例如 “simpleEntry”。 (3) (simpleTbColum1)是表的列对象,(Integer32)是此列对象的类型 ,举例如下: -- 1.3.6.1.4.1.9999.3.9.1.1
simpleTbColum1 OBJECT-TYPE
SYNTAX Integer32 (1..65536)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Description."
::= { simpleEntry 1 }
  1. 完整的示例

test.mib

TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS
OBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUP
FROM SNMPv2-CONF
enterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,
NOTIFICATION-TYPE
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC; -- 企业
FiberHome OBJECT IDENTIFIER ::= { enterprises 5888 } -- 产品型号或系列
FitON-DP48 OBJECT IDENTIFIER ::= { FiberHome 1 } -- 系统信息
systemInformation OBJECT IDENTIFIER ::= { FitON-DP48 1 } identManufacturer OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Manufacturer"
::= { systemInformation 1 } identModel OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Model"
::= { systemInformation 2 } identSN OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Serial Number"
::= { systemInformation 3 } identSoftwareVersion OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"SoftwareVersion"
::= { systemInformation 4 } -- 标量示例(只读、可读写)
Sensor OBJECT IDENTIFIER ::= { FitON-DP48 2 } Rsensor1 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"sensor read-only"
::= { Sensor 1 } Rsensor2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"sensor read-only"
::= { Sensor 2 } RWsensor1 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"sensor read-write"
::= { Sensor 3 } RWsensor2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"sensor read-write"
::= { Sensor 4 } -- 表类型示例(温湿度传感器表)
temp_humidity OBJECT IDENTIFIER ::= { FitON-DP48 3 } temp_humidityTable OBJECT-TYPE
SYNTAX SEQUENCE OF Temp_humidityEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Description."
::= { temp_humidity 1 } temp_humidityEntry OBJECT-TYPE
SYNTAX Temp_humidityEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Description."
INDEX { thIndex }
::= { temp_humidityTable 1 } Temp_humidityEntry ::=
SEQUENCE {
thIndex Integer32,
temperature Integer32,
humidity Integer32,
temperature_cal Integer32,
humidity_cal Integer32,
} thIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The index of temp_humidity sensor."
::= { temp_humidityEntry 1 } temperature OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The temperature of sensor."
::= { temp_humidityEntry 2 } humidity OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The humidity of sensor."
::= { temp_humidityEntry 3 } temperature_cal OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The sensor temperature calibration."
::= { temp_humidityEntry 4 } humidity_cal OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"The sensor humidity calibration."
::= { temp_humidityEntry 5 } END

snmp总结二:MIB语法的更多相关文章

  1. Azure Terraform(二)语法详解

    一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...

  2. Azure Bicep(二)语法简介

    一,引言 上一篇文章有介绍到 Azure Bicep 的部署问题,文中也只是演示部署范围为 Sub,并将演示的 Azure Resource Group 到 Azure.给定 Bicep 文件,可以部 ...

  3. Lua 学习笔记(二)语法、类型、值

    首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码.Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者 ...

  4. Jade模板引擎学习(二)语法:代码、变量、循环、过滤器及mixin

    Jade语法 一.代码 不会被缓冲代码 ul - for(var i=0; i; i++) li Jade Engine 会转换为: <ul> <li>Jade Engine& ...

  5. QML学习(二)——<QML语法>

    一.Qml类型 QML类型分为三类:基本类型.QML对象类型以及JavaScript类型 1 基本类型 我们可以再qt帮助文档中搜索基本类型查看 基本类型的概念是相对于QML对象类型而言的,QML 对 ...

  6. 前端知识(二)05-Eslint语法规范检查-谷粒学院

    目录 一.ESLint简介 二.启用ESLint 1.ESLint插件安装 2.插件的扩展设置 3.确认开启语法检查 三.ESLint规则说明 1.规则说明 2.语法规则 一.ESLint简介 ESL ...

  7. tn文本分析语言(二) 基本语法

    tn是desert和tan共同开发的一种用于匹配,转写和抽取文本的语言.解释器使用Python实现,代码不超过1000行. 本文主要介绍tn的基本语法.高级内容可以参考其他篇章.使用这样的语法,是为了 ...

  8. MySQL与Oracle 差异比较之二基本语法

    基本语法 编号 类别 ORACLE MYSQL 注释 1 变量的声明方式不同 li_index NUMBER := 0 DECLARE li_index INTEGER DEFAULT 0 1. my ...

  9. <二> jQuery 语法

    通过jQuery你可以选择/查询html元素,并对它们进行操作.jQuery 使用的语法是 XPath 与 CSS 选择器语法的组合. $(this).hide() 隐藏当前html元素 $(&quo ...

  10. JSP编译成Servlet(二)语法树的遍历——访问者模式

    语法树可以理解成是一种数据结构,假如某些语句已经被解析成一棵语法树,那么接下来就是要对此语法树进行处理,但考虑到不将处理操作与数据结构混合在一块,我们需要一种方法将其分离.其实对于语法树的处理最典型的 ...

随机推荐

  1. 快速排序(NB)

    博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ def partition(li, left, right): tmp = li ...

  2. Centos7 虚拟机挂载未分配的空间

    客户给分配了一台虚拟机,系统安装是Centos7系统,空间为80G,df -h 命令查看系统后发现只有40G左右的空间可用,剩余空间未分配.下面记录主要过程: 查看当前已分配的空间 df -h [ro ...

  3. nginx同时使用(http)80和(https)443端口详解

    server { listen 443 ssl; #监听https 443时需加ssl server_name ; #你的域名 ssl on; ssl_certificate ; #证书路径 ssl_ ...

  4. Delphi edit只允许输入数字

    if not (key in ['0'..'9',#8]) then key := #0;

  5. 集合体系介绍、collection的使用--java进阶day09

    1.集合体系结构 我们要学习的集合大体分为两种,一种是单列集合,一种是双列集合 2.单列集合 单列集合又分为两个派系,分别为list接口和set接口,这两个接口皆是collection接口的子接口 3 ...

  6. .NET Core & ConsoleApp & appsettings.json

    准备 Visual Studio 2017 .NET Core 2.1 新建控制台应用(.NET Core) 默认的 Program.cs // Program.cs using System; na ...

  7. lombok用法

    加入 maven 依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lo ...

  8. 解释Spring框架中bean的生命周期

    一.Bean生命周期的流程图 二.spring的生命周期 spring生命周期中的阶段,包括初始化.使用.销毁. 1.初始化阶段 1)调用bean的构造函数,创建实例: 2)进行参数依赖注入: 3)若 ...

  9. 康谋分享 | 数据隐私和匿名化:PIPL与GDPR下,如何确保数据合规?(二)

    在上期数据隐私和匿名化系列文章中,我们主要分享了<中国个人信息保护法>(PIPL)和<欧盟通用数据保护条例>(GDPR)在涵盖范围.定义.敏感信息等方面的异同点,今天,我们将重 ...

  10. MySQL之profiling性能优化

    如果需要优化一条SQL,想了解一条sql的每个阶段的耗时分布,则可以使用profiling来进行分析,能很方便的定位在哪个阶段.什么资源引起的性能问题. 一.开启profiling参数 此参数默认是关 ...