《精通SNMP》——2.3 常用类型

简介:

本节书摘来自异步社区《精通SNMP》一书中的第2章,第2.3节,作者: 武孟军 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 常用类型

ASN.1定义了十几种基本类型和结构类型,这些类型都属于通用类。用户可以使用这些类型,定义自己需要的数据类型。

定义类型时,要分别定义类型符号和属于该类型的值符号,一般是给出类型符号和值符号的一系列产生式。对SNMP中用到的类型,应理解它的产生式,这样,在遇到不常见的符号形式时,能根据它的产生式正确判断符号形式的意义。

注意:

下面介绍的类型的BNF产生式的右侧,出现了Type、Value、DefinedValue等符号。它们不是ASN.1的关键字,也不是基本单词,它们在X.208标准中有定义。可以参见附录一。
2.3.1 简单类型
简单类型包括整数类型、逻辑类型、空类型、字节串类型和对象标识符类型,是ASN.1中最常用、最基本的类型。

(1)整数类型,包括正或负的任意整数以及0。

它的类型符号BNF语法如下(前面的序号为方便解释而增加的,下同):

(1) IntegerType ::=INTEGER | INTEGER{NamedNumberList}  
(2) NamedNumberList ::=NamedNumber | NamedNumberList,NamedNumber 
(3) NamedNumber ::= identifier(SignedNumber) | identifier(DefinedValue) 
(4) SignedNumber ::= number | -number

值符号语法如下:

IntegerValue ::=SignedNumber | identifier

IntegerType和IntegerValue分别是ASN.1使用的整型类型引用和整型值引用,其余类型与它们相似。

第1条产生式右侧有两个可选项INTEGER和INTEGER{NamedNumberList},其意义可以理解为,整数类型的类型符号IntegerType被定义为INTEGER或INTEGER{NamedNumberList}。当选择第1个选择项INTEGER时,它是ASN.1关键字,也是终结符,则可确定类型符号为INTEGER;当选择第2个选择项时,符号{ 和 }为基本单词,利用第2条和第3条(选第1个选择项,identifier为基本单词,用具体的标识符替换)产生式替换NamedNumberList,并使用第4条产生式用number替换SignedNumber,然后用数字替换number,最终,IntegerType可以推导出下面的符号形式(当然还可以推出其他形式):

INTEGER 
INTEGER { one-octet (1),two-octet(2),three-octet(3)}

(2)逻辑类型,只有两个值可选:TRUE或FALSE。

它的类型符号BNF语法如下:

BooleanType ::= BOOLEAN

值符号BNF语法如下:

BooleanValue ::= TRUE | FALSE

(3)空类型,只有一个值NULL。类型符号BNF语法如下:

NullType ::= NULL

值符号BNF语法如下:

NullValue ::= NULL

(4)OCTECT STRING,字节串类型,0个或多个字节组成的序列。

类型符号BNF语法如下:

OctetStringType ::= OCTET STRING

值符号BNF语法如下:

OctetStringValue ::= bstring | hstring

bstring 和 hstring是基本符号,在2.2.4小节中有定义。

(5)OBJECT IDENTIFIER,对象标识符类型,可以用来标识任意的信息实体。

类型符号BNF语法如下:

ObjectIdentifierType ::= OBJECT IDENTIFIER

值符号BNF语法如下:

(1) ObjectIdentifierValue ::= {ObjIdComponentList} | {DefinedValue ObjIdComponentList} 
(2) ObjIdComponentList ::= ObjIdComponent | ObjIdComponent ObjIdComponentList 
(3) ObjIdComponent ::= NameForm | NumberForm | NameAndNumberForm 
(4) NameForm ::= identifier 
(5) NumberForm ::= number | DefinedValue 
(6) NameAndNumberForm ::= identifier ( NumberForm )

类型符号定义比较简单,值符号定义稍微复杂些。使用第5条生成式中的number递归替换第3、第2和第1条生成式对应的符号,最后可以得到值符号形式之一:

{ number number number number }

继续用数字替换number,可得到如下的值符号形式:

{ 1 3 6 1 }

同样,使用第6条产生式递归替换上面的生成式,则可以得到类似的值符号形式:

{iso (1) org (3) dod (6) internet (1) mgmt (2) mib-2 (1)}

再如,使用第4条产生式,用identifier替换NameForm,同时使用number替换NumberForm,同样的值最终还可以表示为:

{ mgmt 1 }

2.3.2 结构类型
结构类型有SET、SET OF、SEQUENCE和SEQUENCE OF几种,其中前两种SNMP中没有用到,这里只介绍后两种。

(1)SEQUENCE结构类型,组件可以是0个或多个不同类型组成的有序序列。

它的类型符号BNF语法如下:

(1) SequenceType ::= SEQUENCE {ElementTypeList} | SEQUENCE { } 
(2) ElementTypeList ::= ElementType | ElementTypeList,ElementType 
(3) ElementType ::= NamedType | NamedType OPTIONAL | NamedType DEFAULT Value 
              | COMPONENTS OF Type

值符号BNF语法如下:

SequenceValue ::= {ElementValueList} | { } 
ElementValueList ::= NamedValue | ElementValueList,NamedValue

SNMP中,第3个生成式中后3个选项是不允许使用的。

其中,NamedType和NamedValue在X .208中有定义,简单起见,这里可以理解为已经定义的类型和对应的值。

(2)SEQUENCE OF构造类型,由同一类型组成的有序序列。类型符号BNF语法如下:

SequenceOfType ::= SEQUENCE OF Type | SEQUENCE

值符号BNF语法如下:

SequenceOfValue ::= {ValueList} | { } 
ValueList ::= Value | ValueList,Value

2.3.3 其他类型
CHOICE和ANY是两个特殊的类型。

(1)CHOICE是选择类型,在列举的类型序列中选择一种。它的类型符号BNF语法如下:

ChoiceType ::= CHOICE{AlternativeTypeList} 
AlternativeTypeList ::= NamedType | AlternativeTypeList,NamedType

值符号BNF语法如下:

ChoiceValue ::= NamedValue

(2)ANY是任意类型,可以是ASN.1或其他标准定义的任意一种类型。它的类型符号BNF语法如下:

AnyType ::=ANY |ANY DEFINED BY identifier

值符号BNF语法如下:

AnyValue ::= TypeValue

这两种类型的值符号等同于取代它们的具体类型,因此,没有为它们分配标志,其标志就是运行时期取代它的有具体类型的标志码。

相关文章
|
存储 监控 Linux
zabbix使用snmp监控Linux主机(二十)
使用snmp监控Linux主机 1.snmp协议介绍 SNMP(简单网络管理协议)也是应用层的一种协议,默认端口号为161,我们平时监控Linux主机都是安装一个agent客户端进行监控,但是有的公司还需要监控网络设备和Windows主机,这时就不得不采用snmp协议去监控设备了
606 0
zabbix使用snmp监控Linux主机(二十)
|
存储 监控 安全
Zabbix SNMP监控安装、配置与服务器实例(学习笔记六)
SNMP可以监控路由器、打印机、UPS、摄像头、服务器等。 1、安装、配置snmp  yum install net-snmp* -y # vim /etc/snmp/snmpd.
2538 0
|
9月前
|
运维 监控 数据安全/隐私保护
【运维知识进阶篇】zabbix5.0稳定版详解5(SNMP网络管理协议监控)
【运维知识进阶篇】zabbix5.0稳定版详解5(SNMP网络管理协议监控)
194 0
|
10月前
|
监控 网络架构
Zabbix的snmp监控
Zabbix的snmp监控
77 0
|
12月前
|
监控 数据安全/隐私保护 网络架构
【Zabbix】Zabbix基于SNMP监控配置
【Zabbix】Zabbix基于SNMP监控配置
443 0
|
存储 消息中间件 Prometheus
统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
QGS
|
监控 安全 开发者
zabbix5.0.8-SNMP协议监控Windows10-PC
记zabbix5.0.8-SNMP协议监控Windows10-PC
QGS
174 0
zabbix5.0.8-SNMP协议监控Windows10-PC