一起学习PySNMP(3)——理解什么是MIB
2009-10-19 18:01
375 查看
什么是MIB?什么是SMI
MIB全称ManagementInformationBase。
SMI全称StructureofManagementInformation。
简单的解释一下:
SMI是定义ManagementInformation(管理信息)的一种结构定义,不同的设备信息都有不同的结构定义,而MIB就是将这些不同的管理信息组织起来的一种结构,通俗的说这种结构式一种树形结构,是一层一层下来的。
下图就是一个简单的MIB结构定义
上面黄色部分就是代表了CISCO公司的MIB库访问路径,总结出来就是:
iso(1).org(3).dod(6).internet(1).private(4).enterprise(1).cisco(9)
为了简单访问,我们一般使用OID(OBJECTIDENTIFIER)来标示访问,如下:
1.3.6.1.4.1.9
大概明白了什么是MIB了吧,那现在再来看看SMI。
sysNameOBJECT-TYPE
SYNTAXDisplayString(SIZE(0..255))
ACCESSread-write
STATUSmandatory
DESCRIPTION
"Anadministratively-assignednameforthismanagednode.Byconvention,thisisthenode's
fully-qualifieddomainname."
::={system5}上面的定义就是一个SMI的一个例子,上面说了些什么呢?我们从下往上来看。
::={system5}
它的上一个节点叫做system,是system下面编号为5的子节点。
DESCRIPTION
"Anadministratively-assignednameforthismanagednode.Byconvention,thisisthenode's
fully-qualifieddomainname."
这个是对这个基点的描述,类似于注释信息。STATUSmandatory此节点在Agent侧实现,是有效的。
ACCESSread-write
远端能够读并且写这个节点的值。
SYNTAXDisplayString(SIZE(0..255))
这个节点是一个可显示的字符串组成的,大小为0-255。
sysNameOBJECT-TYPE
此节点的名字叫做sysName。
听了上面的解释应该看懂了吧。下面我们来看一下上面那些概念在PySNMP中是怎么样来表示的。
PySNMP中的MIB和SMI
先看看MIB的节点的一个定义:
MibNode定义了MIB树的节点的基础定义,name就是一个tuple,例如:(1,3,6,1,4,1,20408)。它代表了这个MIB节点的访问路径。
再看一下ObjectType的定义:
sysName是MibScalar的实例(MibScalar在SNMPv2-SMI.py中有,大家可以自己看看定义)
OID为(1,3,6,1,2,1,1,5),
节点的数据类型为可显示字符串DisplayString(),数据类型的约束为0-255个字符subtype(subtypeSpec=constraint.ValueSizeConstraint(0,255))),
访问的权限为可写可读setMaxAccess("readwrite")
节点的描述信息为setDescription("Anadministratively-assignednameforthismanaged\nnode.Byconvention,thisisthenode'sfully-qualified\ndomainname.Ifthenameisunknown,thevalueis\nthezero-lengthstring.")
上面的描述够简单了吧,上面的描述是在
C:\Python26\Lib\site-packages\pysnmp\v4\smi\mibs\SNMPv2-MIB.py
文件的第26行,有兴趣可以仔细看一下。
再给大家列一下资料,要向成为专家还得从下面这些文档看起。
1、StructureandIdentificationofManagementInformationforTCP/IP-basedinternets
http://www.ietf.org/rfc/rfc1065.txt
这篇文档定义了SMI的基本语法,就是我们前面提到的DESCRIPTION、STATUS、ACCESS等。
2、ManagementInformationBaseforNetworkManagementofTCP/IP-basedinternets
http://www.ietf.org/rfc/rfc1066.txt
这篇文档定义了机遇TCP、IP网络的基本MIB信息定义
3、ManagementInformationBaseforNetworkManagementofTCP/IP-basedinternets:MIB-II
http://www.ietf.org/rfc/rfc1213.txt
这篇文档是对MIB的扩充,也就是通常所说的MIB2。
MIB全称ManagementInformationBase。
SMI全称StructureofManagementInformation。
简单的解释一下:
SMI是定义ManagementInformation(管理信息)的一种结构定义,不同的设备信息都有不同的结构定义,而MIB就是将这些不同的管理信息组织起来的一种结构,通俗的说这种结构式一种树形结构,是一层一层下来的。
下图就是一个简单的MIB结构定义
上面黄色部分就是代表了CISCO公司的MIB库访问路径,总结出来就是:
iso(1).org(3).dod(6).internet(1).private(4).enterprise(1).cisco(9)
为了简单访问,我们一般使用OID(OBJECTIDENTIFIER)来标示访问,如下:
1.3.6.1.4.1.9
大概明白了什么是MIB了吧,那现在再来看看SMI。
sysNameOBJECT-TYPE
SYNTAXDisplayString(SIZE(0..255))
ACCESSread-write
STATUSmandatory
DESCRIPTION
"Anadministratively-assignednameforthismanagednode.Byconvention,thisisthenode's
fully-qualifieddomainname."
::={system5}上面的定义就是一个SMI的一个例子,上面说了些什么呢?我们从下往上来看。
::={system5}
它的上一个节点叫做system,是system下面编号为5的子节点。
DESCRIPTION
"Anadministratively-assignednameforthismanagednode.Byconvention,thisisthenode's
fully-qualifieddomainname."
这个是对这个基点的描述,类似于注释信息。STATUSmandatory此节点在Agent侧实现,是有效的。
ACCESSread-write
远端能够读并且写这个节点的值。
SYNTAXDisplayString(SIZE(0..255))
这个节点是一个可显示的字符串组成的,大小为0-255。
sysNameOBJECT-TYPE
此节点的名字叫做sysName。
听了上面的解释应该看懂了吧。下面我们来看一下上面那些概念在PySNMP中是怎么样来表示的。
PySNMP中的MIB和SMI
先看看MIB的节点的一个定义:
classMibNode: label='' def__init__(self,name): self.name=name def__repr__(self): return'%s(%s)'%(self.__class__.__name__,self.name) defgetName(self):returnself.name defgetLabel(self):returnself.label defsetLabel(self,label): self.label=label returnself defclone(self,name=None): myClone=self.__class__(self.name) ifnameisnotNone: myClone.name=name ifself.labelisnotNone: myClone.label=self.label returnmyClone
MibNode定义了MIB树的节点的基础定义,name就是一个tuple,例如:(1,3,6,1,4,1,20408)。它代表了这个MIB节点的访问路径。
再看一下ObjectType的定义:
classObjectType(MibNode): maxAccess=None def__init__(self,name,syntax=None): MibNode.__init__(self,name) self.syntax=syntax #XXX def__cmp__(self,other):returncmp(self.syntax,other) def__repr__(self): return'%s(%s,%s)'%( self.__class__.__name__,self.name,self.syntax ) defgetSyntax(self): returnself.syntax defgetUnits(self): returngetattr(self,'units','') defsetUnits(self,v): self.units=v returnself defgetMaxAccess(self): returngetattr(self,'maxAccess','not-accessible') defsetMaxAccess(self,v): self.maxAccess=v returnself defgetStatus(self): returngetattr(self,'status','current') defsetStatus(self,v): self.status=v returnself defgetDescription(self): returngetattr(self,'description','') defsetDescription(self,v): self.description=v returnself defgetReference(self): returngetattr(self,'reference','') defsetReference(self,v): self.reference=v returnself defasn1Print(self): return'\ OBJECT-TYPE\n\ SYNTAX%s\n\ UNITS\"%s\"\n\ MAX-ACCESS%s\n\ STATUS%s\n\ DESCRIPTION\"%s\"\n\ REFERENCE\"%s\"\ '%(self.getSyntax().__class__.__name__, self.getUnits(), self.getMaxAccess(), self.getStatus(), self.getDescription(), self.getReference())
其实仔细的分析上面这个类,就是实现了MIB定义里面的OBJECT-TYPE、SYNTAX、MAX-ACCESS、
STATUS、DESCRIPTION关键字,有几个关键字上面有讲过了。
大家应该有点明白了PySNMP实现的一些道理了吧,如果你需要在深入的琢磨PySNMP对于MIB的表达,
请查看C:\Python26\Lib\site-packages\pysnmp\v4\smi\mibs\SNMPv2-SMI.py
(如果Python装的不一样,请自己更换一下路径)
上面讲了一些基本的MIB定义,再来看看上面的sysName在PySNMP是怎么定义的吧,如下:
sysName=MibScalar((1,3,6,1,2,1,1,5),\
DisplayString().subtype(subtypeSpec=constraint.ValueSizeConstraint(0,\
255))).setMaxAccess("readwrite")
ifmibBuilder.loadTexts:sysName.setDescription(\
"Anadministratively-assignednameforthismanaged\nnode.\
Byconvention,thisisthenode'sfully-qualified\ndomainname.\
Ifthenameisunknown,thevalueis\nthezero-lengthstring.")
sysName是MibScalar的实例(MibScalar在SNMPv2-SMI.py中有,大家可以自己看看定义)
OID为(1,3,6,1,2,1,1,5),
节点的数据类型为可显示字符串DisplayString(),数据类型的约束为0-255个字符subtype(subtypeSpec=constraint.ValueSizeConstraint(0,255))),
访问的权限为可写可读setMaxAccess("readwrite")
节点的描述信息为setDescription("Anadministratively-assignednameforthismanaged\nnode.Byconvention,thisisthenode'sfully-qualified\ndomainname.Ifthenameisunknown,thevalueis\nthezero-lengthstring.")
上面的描述够简单了吧,上面的描述是在
C:\Python26\Lib\site-packages\pysnmp\v4\smi\mibs\SNMPv2-MIB.py
文件的第26行,有兴趣可以仔细看一下。
再给大家列一下资料,要向成为专家还得从下面这些文档看起。
1、StructureandIdentificationofManagementInformationforTCP/IP-basedinternets
这篇文档定义了SMI的基本语法,就是我们前面提到的DESCRIPTION、STATUS、ACCESS等。
2、ManagementInformationBaseforNetworkManagementofTCP/IP-basedinternets
这篇文档定义了机遇TCP、IP网络的基本MIB信息定义
3、ManagementInformationBaseforNetworkManagementofTCP/IP-basedinternets:MIB-II
这篇文档是对MIB的扩充,也就是通常所说的MIB2。
相关文章推荐
- 一起学习PySNMP——理解什么是MIB
- 一起学习PySNMP(1)——网络管理与SNMP
- 一起学习PySNMP(2)——PySNMP的安装
- 一起学习基于模型测试:什么是基于模型测试
- Java入门学习-学会使用日期函数和日期的计算方法,理解什么是时间戳
- 跟我一起数据挖掘(19)——什么是数据挖掘(2)
- 一起学习CI-2.CI是什么?
- 深入 理解Http协议、什么是B/S模式学习
- 深入理解 Laravel Eloquent(三)——模型间关系(关联) 在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。官方英文文档中叫 Relatio
- [PHP代码审计] -那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况-学习笔记
- 你真的理解:“学而不思则罔”? 什么是学习吗?
- 3.23神经网络理解-学习到了什么特征
- xml学习:有什么优势和特点及常见问答加深理解
- 跟我一起数据挖掘(18)——什么是数据挖掘(1)
- Java学习笔记6 理解什么是面向对…
- Flash3D学习计划(二)——理解世界,取景,投影变换,并理解投影坐标系
- Unix环境编程学习笔记----如何理解套接字缓冲区???? ?其作用和原理是什么???
- F#学习:理解什么是“可区分联合”(Discriminated Union)
- Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转
- 博文视点大讲堂第45期——我们应该向魔兽世界学习什么 圆满结束