您的位置:首页 > 其它

一起学习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的节点的一个定义:

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

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。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐