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. Two-Stream Convolutional Networks for Action Recognition in Videos论文精读

    Two-Stream Convolutional Networks for Action Recognition in Videos论文精读 大家好,今天我要讲的论文是一篇视频理解领域的开山之作,这是 ...

  2. static修饰成员变量的特点及static修饰成员变量内存图解-java se进阶 day01

    1.static介绍 static是静态的意思,它可以用于修饰成员变量和成员方法 2.static的特点 1.被static修饰了的成员变量,可以被类中的所有对象所共享 虽然stu02没有给schoo ...

  3. SQL慢查询经历与解决方案

    一.问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: 我在测试环境构造了500万条数据,模拟了这个慢查询. 简单来说,就是查询一定条件下, ...

  4. Springboot连接Greenplum,分页查询

    1.springboot分页查询greenplum数据报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.ap ...

  5. Electron 开发:获取当前客户端 IP

    Electron 开发:获取当前客户端 IP 一.背景与需求 1. 项目背景 客户端会自启动一个服务,Web/后端服务通过 IP + port 请求以操作客户端接口 2. 初始方案与问题 2.1. 初 ...

  6. MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

    在MySQL中,INNER JOIN.LEFT JOIN和RIGHT JOIN是用于连接两个或多个表的操作符,它们的主要区别在于如何处理匹配的记录和不匹配的记录. INNER JOIN: 只返回两个表 ...

  7. MCP云托管最优解,揭秘国内最大MCP中文社区背后的运行时

    作者:封崇 近期,中国第一AI开源社区魔搭(ModelScope)推出全新MCP广场,上架千余款热门的 MCP 服务.从当下火热的高德地图.网页抓取再到独家的支付宝,开发者/机构可以查看近1500种M ...

  8. 8.6K star!完全免费+本地运行+无需GPU,这款AI搜索聚合神器绝了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 FreeAskInternet是一款革命性的开源项目,它完美结合了多引擎搜索和智能语言模型, ...

  9. 17.1K star!两小时就能训练出专属于自己的个性化小模型,这个开源项目让AI触手可及!

    「只需一张消费级显卡,2小时完成26M参数GPT训练!」「从零构建中文大模型的最佳实践指南」「兼容OpenAI API,轻松接入各类AI应用平台」 项目介绍 MiniMind是由开发者Jingyao ...

  10. Multisim14.0安装包免费获取,超详细中文安装步骤助你快速上手!

    Multisim14.0简介 Multisim14.0是由美国国家仪器公司(NI)推出的专业电子设计自动化](EDA)工具,广泛应用于电路设计.仿真验证.教学实验及科研开发领域.其核心功能是通过虚拟仿 ...