SNMP介绍及命令
![http://baike.baidu.com/pic/1/11489740768845190.jpg](http://baike.baidu.com/pic/1/11489740768845190.jpg)
简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。
SNMP事实上指一系列网络管理规范的集合,包括协议本身,数据结构的定义和一些相关概念。
简单网络管理协议(SNMP)是最早提出的网络管理协议之一,它一推出就得到了广泛的应用和支持,特别是很快得到了数百家厂商的支持,其中包括IBM,HP,SUN等大公司和厂商。目前SNMP已成为网络管理领域中事实上的工业标准,并被广泛支持和应用,大多数网络管理系统和平台都是基于SNMP的。
一、 SNMP概述
SNMP的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是著名的SNMP。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受 Internet标准网络管理框架的影响也很大。现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
SNMP的体系结构是围绕着以下四个概念和目标进行设计的:保持管理代理(agent)的软件成本尽可能低;最大限度地保持远程管理的功能,以便充分利用 Internet的网络资源;体系结构必须有扩充的余地;保持SNMP的独立性,不依赖于具体的计算机、网关和网络传输协议。在最近的改进中,又加入了保证SNMP体系本身安全性的目标。
另外,SNMP中提供了四类管理操作:get操作用来提取特定的网络管理信息;get-next操作通过遍历活动来提供强大的管理信息提取能力;set操作用来对管理信息进行控制(修改、设置);trap操作用来报告重要的事件。
二、 SNMF管理控制框架与实现
1.SNMP管理控制框架
SNMP定义了管理进程(manager)和管理代理(agent)之间的关系,这个关系称为共同体(community)。描述共同体的语义是非常复杂的,但其句法却很简单。位于网络管理工作站(运行管理进程)上和各网络元素上利用SNMP相互通信对网络进行管理的软件统统称为SNMP应用实体。若干个应用实体和SNMP组合起来形成一个共同体,不同的共同体之间用名字来区分,共同体的名字则必须符合Internet的层次结构命名规则,由无保留意义的字符串组成。此外,一个SNMP应用实体可以加入多个共同体。
SNMP的应用实体对Internet管理信息库中的管理对象进行操作。一个SNMP应用实体可操作的管理对象子集称为SNMP MIB授权范围。SNMP应用实体对授权范围内管理对象的访问仍然还有进一步的访问控制限制,比如只读、可读写等。SNMP体系结构中要求对每个共同体都规定其授权范围及其对每个对象的访问方式。记录这些定义的文件称为“共同体定义文件”。
SNMP的报文总是源自每个应用实体,报文中包括该应用实体所在的共同体的名字。这种报文在SNMP中称为“有身份标志的报文”,共同体名字是在管理进程和管理代理之间交换管理信息报文时使用的。管理信息报文中包括以下两部分内容:
(1)共同体名,加上发送方的一些标识信息(附加信息),用以验证发送方确实是共同体中的成员,共同体实际上就是用来实现管理应用实体之间身份鉴别的;
(2)数据,这是两个管理应用实体之间真正需要交换的信息。
在第三版本前的SNMP中只是实现了简单的身份鉴别,接收方仅凭共同体名来判定收发双方是否在同一个共同体中,而前面提到的附加倍息尚未应用。接收方在验明发送报文的管理代理或管理进程的身份后要对其访问权限进行检查。访问权限检查涉及到以下因素:
(1)一个共同体内各成员可以对哪些对象进行读写等管理操作,这些可读写对象称为该共同体的“授权对象”(在授权范围内);
(2)共同体成员对授权范围内每个对象定义了访问模式:只读或可读写;
(3)规定授权范围内每个管理对象(类)可进行的操作(包括get,get-next,set和trap);
(4)管理信息库(MIB)对每个对象的访问方式限制(如MIB中可以规定哪些对象只能读而不能写等)。
管理代理通过上述预先定义的访问模式和权限来决定共同体中其他成员要求的管理对象访问(操作)是否允许。共同体概念同样适用于转换代理(Proxy agent),只不过转换代理中包含的对象主要是其他设备的内容。
2.SNMP实现方式为了提供遍历管理信息库的手段,SNMP在其MIB中采用了树状命名方法对每个管理对象实例命名。每个对象实例的名字都由对象类名字加上一个后缀构成。对象类的名字是不会相互重复的,因而不同对象类的对象实例之间也少有重名的危险。
在共同体的定义中一般要规定该共同体授权的管理对象范围,相应地也就规定了哪些对象实例是该共同体的“管辖范围”,据此,共同体的定义可以想象为一个多叉树,以词典序提供了遍历所有管理对象实例的手段。有了这个手段,SNMP就可以使用get-next操作符,顺序地从一个对象找到下一个对象。get- next(object-instance)操作返回的结果是一个对象实例标识符及其相关信息,该对象实例在上面的多叉树中紧排在指定标识符;bject -instance对象的后面。这种手段的优点在于,即使不知道管理对象实例的具体名字,管理系统也能逐个地找到它,并提取到它的有关信息。遍历所有管理对象的过程可以从第一个对象实例开始(这个实例一定要给出),然后逐次使用get-next,直到返回一个差错(表示不存在的管理对象实例)结束(完成遍历)。
由于信息是以表格形式(一种数据结构)存放的,在SNMP的管理概念中,把所有表格都视为子树,其中一张表格(及其名字)是相应子树的根节点,每个列是根下面的子节点,一列中的每个行则是该列节点下面的子节点,并且是子树的叶节点,如下图所示。因此,按照前面的子树遍历思路,对表格的遍历是先访问第一列的所有元素,再访问第二列的所有元素……,直到最后一个元素。若试图得到最后一个元素的“下一个”元素,则返回差错标记。
SNMP树形表格结构示意图
SNMP中各种管理信息大多以表格形式存在,一个表格对应一个对象类,每个元素对应于该类的一个对象实例。那么,管理信息表对象中单个元素(对象实例)的操作可以用前面提到的get-next方法,也可以用后面将介绍的get/set等操作。下面主要介绍表格内一行信息的整体操作。
(1)增加一行:通过SNMP只用一次set操作就可在一个表格中增加一行。操作中的每个变量都对应于待增加行中的一个列元素,包括对象实例标识符。如果一个表格中有8列,则set操作中必须给出8个操作数,分别对应8个列中的相应元素。
(2)删除一行:删除一行也可以通过SNMP调用一次set操作完成,并且比增加一行还简单。删除一行只需要用set操作将该行中的任意一个元素(对象实例)设置成“非法”即可。但该操作有一个例外:地址翻译组对象中有一个特殊的表(地址变换表),该表中未定义一个元素的“非法”条件。因此,SNMP中采用的办法是将该表中的地址设置成空串,而空字符串将被视为非法元素。
至于删除一行时,表中的一行元素是否真的在表中消失,则与每个设备(管理代理)的具体实现有关。因此,网络管理操作中,运行管理进程可能从管理代理中得到“非法”数据,即已经删除的不再使用的元素的内容,因此管理进程必须能通过各数据字段的内容来判断数据的合法性。
三、背景知识
SNMP开发于九十年代早期,其目的是简化大型网络中设备的管理和数据的获取。许多与网络有关的软件包,如HP的OpenView和Nortel Networks的Optivity Network Management System,还有Multi Router Traffic Grapher(MRTG)之类的免费软件,都用SNMP服务来简化网络的管理和维护。
由于SNMP的效果实在太好了,所以网络硬件厂商开始把SNMP加入到它们制造的每一台设备。今天,各种网络设备上都可以看到默认启用的SNMP服务,从交换机到路由器,从防火墙到网络打印机,无一例外。
仅仅是分布广泛还不足以造成威胁,问题是许多厂商安装的SNMP都采用了默认的通信字符串(例如密码),这些通信字符串是程序获取设备信息和修改配置必不可少的。采用默认通信字符串的好处是网络上的软件可以直接访问设备,无需经过复杂的配置。
通信字符串主要包含两类命令:GET命令,SET命令。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个缃涌凇⑿薷穆酚善鞑问裙δ堋5芟匀唬珿ET、SET命令都可能被用于拒绝服务攻击(DoS)和恶意修改网络参数。
最常见的默认通信字符串是public(只读)和private(读/写),除此之外还有许多厂商私有的默认通信字符串。几乎所有运行SNMP的网络设备上,都可以找到某种形式的默认通信字符串。
SNMP 2.0和SNMP 1.0的安全机制比较脆弱,通信不加密,所有通信字符串和数据都以明文形式发送。攻击者一旦捕获了网络通信,就可以利用各种嗅探工具直接获取通信字符串,即使用户改变了通信字符串的默认值也无济于事。
近几年才出现的SNMP 3.0解决了一部分问题。为保护通信字符串,SNMP 3.0使用DES(Data Encryption Standard)算法加密数据通信;另外,SNMP 3.0还能够用MD5和SHA(Secure Hash Algorithm)技术验证节点的标识符,从而防止攻击者冒充管理节点的身份操作网络。
虽然SNMP 3.0出现已经有一段时间了,但目前还没有广泛应用。如果设备是2、3年前的产品,很可能根本不支持SNMP 3.0;甚至有些较新的设备也只有SNMP 2.0或SNMP 1.0。
即使设备已经支持SNMP 3.0,许多厂商使用的还是标准的通信字符串,这些字符串对黑客组织来说根本不是秘密。因此,虽然SNMP 3.0比以前的版本提供了更多的安全特性,如果配置不当,其实际效果仍旧有限。
四、禁用SNMP
要避免SNMP服务带来的安全风险,最彻底的办法是禁用SNMP。如果你没有用SNMP来管理网络,那就没有必要运行它;如果你不清楚是否有必要运行 SNMP,很可能实际上不需要。即使你打算以后使用SNMP,只要现在没有用,也应该先禁用SNMP,直到确实需要使用SNMP时才启用它。
下面列出了如何在常见的平台上禁用SNMP服务。
■ Windows XP和Windows 2000
在XP和Win 2K中,右击“我的电脑”,选择“管理”。展开“服务和应用程序”、“服务”,从服务的清单中选择SNMP服务,停止该服务。然后打开服务的“属性”对话框,将启动类型该为“禁用”(按照微软的默认设置,Win 2K/XP默认不安装SNMP服务,但许多软件会自动安装该服务)。
■ Windows NT 4.0
选择“开始”→“设置”,打开服务设置程序,在服务清单中选择SNMP服务,停止该服务,然后将它的启动类型该为禁用。
■ Windows 9x
打开控制面板的网络设置程序,在“配置”页中,从已安装的组件清单中选择“Microsoft SNMP代理”,点击“删除”。检查HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft"Windows" CurrentVersion"RunServices和HKEY_LOCAL_MACHINE" SOFTWARE"Microsoft"Windows"CurrentVersion"Run注册键,确认不存在snmp.exe。
■ Cisco Systems硬件
对于Cisco的网络硬件,执行“no SNMP-server”命令禁用SNMP服务。如果要检查SNMP是否关闭,可执行“show SNMP”命令。这些命令只适用于运行Cisco IOS的平台;对于非IOS的Cisco设备,请参考随机文档。
■ HP硬件
对于所有使用JetDirect卡(绝大部分HP网络打印机都使用它)的HP网络设备,用telnet连接到JetDirect卡的IP地址,然后执行下面的命令:
SNMP-config: 0
quit
这些命令将关闭设备的SNMP服务。但必须注意的是,禁用SNMP服务会影响服务的发现操作以及利用SNMP获取设备状态的端口监视机制。
■ Red Hat Linux
对于Red Hat Linux,可以用Linuxconf工具从自动启动的服务清单中删除SNMP,或者直接从/etc/services文件删除启动SNMP的行。对于其他Linux系统,操作方法应该也相似。
五、保障SNMP的安全
如果某些设备确实有必要运行SNMP,则必须保障这些设备的安全。首先要做的是确定哪些设备正在运行SNMP服务。除非定期对整个网络进行端口扫描,全面掌握各台机器、设备上运行的服务,否则的话,很有可能遗漏一、二个SNMP服务。特别需要注意的是,网络交换机、打印机之类的设备同样也会运行 SNMP服务。确定SNMP服务的运行情况后,再采取下面的措施保障服务安全。
■ 加载SNMP服务的补丁
安装SNMP服务的补丁,将SNMP服务升级到2.0或更高的版本。联系设备的制造商,了解有关安全漏洞和升级补丁的情况。
■ 保护SNMP通信字符串
一个很重要的保护措施是修改所有默认的通信字符串。根据设备文档的说明,逐一检查、修改各个标准的、非标准的通信字符串,不要遗漏任何一项,必要时可以联系制造商获取详细的说明。
■ 过滤SNMP
另一个可以采用的保护措施是在网络边界上过滤SNMP通信和请求,即在防火墙或边界路由器上,阻塞SNMP请求使用的端口。标准的SNMP服务使用 161和162端口,厂商私有的实现一般使用199、391、705和1993端口。禁用这些端口通信后,外部网络访问内部网络的能力就受到了限制;另外,在内部网络的路由器上,应该编写一个ACL,只允许某个特定的可信任的SNMP管理系统操作SNMP。例如,下面的ACL只允许来自(或者走向) SNMP管理系统的SNMP通信,限制网络上的所有其他SNMP通信:
access-list 100 permit ip host w.x.y any
access-list 100 deny udp any any eq snmp
access-list 100 deny udp any any eq snmptrap
access-list 100 permit ip any any
这个ACL的第一行定义了可信任管理系统(w.x.y)。利用下面的命令可以将上述ACL应用到所有网络接口:
interface serial 0
ip access-group 100 in
总之,SNMP的发明代表着网络管理的一大进步,现在它仍是高效管理大型网络的有力工具。然而,SNMP的早期版本天生缺乏安全性,即使最新的版本同样也存在问题。就象网络上运行的其他服务一样,SNMP服务的安全性也是不可忽视的。不要盲目地肯定网络上没有运行SNMP服务,也许它就躲藏在某个设备上。那些必不可少的网络服务已经有太多让人担忧的安全问题,所以最好关闭SNMP之类并非必需的服务——至少尽量设法保障其安全。
SNMP口令的利用以及一些相关知识 |
一、从SNMP说起
SNMP,Simple Network Management Protocol,简单网络管理协议。用于管理IP网络上结点的协议。
几乎所有的网络设备和网络操作系统都支持SNMP。
接下来要介绍的是:community strings,
也不知道中文翻译是什么意思,呵呵,不过如果理解成为基于SNMP协议信息通信时使用的
一种“查询密码”应该不为过吧。
当使用特殊的客户端应用程序,通过该“查询密码”community strings的验证,将获得
对应的权限(只读 或者 读写)对SNMP中管理信息库(MIB)进行访问。
而管理信息库(MIB)中则保存了系统所有的重要信息。
也就是说,如果可以知道community strings 这个“查询密码”,我们就可以刺探系统的信息了。
比较遗憾的是,很多网络设备厂商以及操作系统厂商,在初始状态下,都使用比较
统一的“查询密码”呵呵,这也就给我们提供了足够的方便。
二、对WIN2K进行刺探扫描
以WIN2K来说,一旦安装并启动了简单网络管理协议,系统将打开
UDP 161 snmp
UDP 162 snmptrap
两个端口。
具体做什么我们不去细究。需要注意的是,这里使用的是UDP端口,而不是TCP端口。
同时,WIN2K系统支持初始的“查询密码”community strings 为:public
我们只要通过一款Resource Kit里面的工具snmputil,就可以方便的获得非常多的信息。
在这里可以下载:http://www.patching.net/abu/tools/win/snmputil.exe
呵呵,简单介绍一下用法
snmputil,就是程序名拉,呵呵。
get,就理解成获取一个信息。
getnext,就理解成获取下一个信息。
walk,就理解成获取一堆信息(嗯,应该说所有数据库子树/子目录的信息)
agent,具体某台机器拉。
community,嗯就是那个“community strings”“查询密码”拉。
oid,这个要多说一下,这个呢,就是物件识别代码(Object Identifier)。
可以把oid理解成MIB管理信息库中各种信息分类存放树资源的一个数字标识。
好了,具体的资料可以查阅相关文章。
开始刺探信息:
尝试获得对方机器当前进程列表
snmputil.exe walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2
尝试获得对方机器系统用户列表
snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 (如下图)
呵呵
是不是很容易的就刺探出了对方的信息?
当然,这样的命令还可以做很多
整理一些列在下面:
snmputil walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系统进程
snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系统用户列表
snmputil get 对方ip public .1.3.6.1.4.1.77.1.4.1.0 列出域名
snmputil walk 对方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安装的软件
snmputil walk 对方ip public .1.3.6.1.2.1.1 列出系统信息
三、一些工具的推荐
snmputil的功能已经完全足够用来进行对网络主机的刺探扫描了,只是因为它是命令行下的工具
而且,超常的oid标识符也并不是那么方便输入。
这里我推荐两款非常不错的网络管理工具,当然,它们的另一个作用就是snmp的刺探。
SolarWinds 2001的IP Network Browser
IP Network Browser是一款snmp浏览工具,它可以提供在输入正确的community strings“查询密码”
后的运行着snmp服务的WIN2K/NT系统上的任何可得的信息。
在下图中,我们可以看到“查询密码”为:public
而在Accounts(账号)表单里,我们已经获得了同上面snmputil命令行方式一样的反馈信息。
功能强大噢。
整个SolarWinds 软件套件更包含了更多的网络管理工具,以后我将在其他的文章里继续介绍。
LANguard Network Scanner 2.0
这是一个网络安全综合扫描工具,主要功能:显示每台主机的NETBIOS主机名,MAC地址,搜寻
共享,操作系统类型判断,并测试共享密码的安全性等等,以html格式输出。
主功能界面:
选中左边SNMP选项,右键呼出SNMPWalk功能
呵呵,出现了很直观的图形界面的MIB树的结构,直接通过选择进入相应的目录树
或者直接输入oid号,就可以查询出对方主机的相应信息。
如账号信息:
当然,LANguard Network Scanner还有一些更高级更适用的功能
比如暴力破解community strings,呵呵自己配置一个字典的话
会非常有效的。
四、如何防范基于snmp的刺探扫描
首先需要注意的是,snmp服务的通讯端口是UDP端口,这也就是大部分网络管理人员很容易忽略的地方。
往往某些网管配置服务器阻断了NetBIOS空会话的建立,就认为系统安全有了相当的保障,可由于安装
了SNMP服务,不知不觉中,就给系统带去了极大的隐患。
最方便和容易的解决方法,就是关闭SNMP服务,或者卸载掉该服务。
如果关掉SNMP服务不方便的话,那么可以通过修改注册表或者直接修改图形界面的SNMP服务属性
进行安全配置。
开始——程序——管理工具——服务——SNMP Service——属性——安全
在这个配置界面中,可以修改community strings,也就是微软所说的“团体名称”,呵呵,也就是
我所说的“查询密码”。或者可以配置是否从某些安全主机上才允许SNMP查询。
不过NT4环境下的朋友就必须修改注册表了。
修改community strings,在
[HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"SNMP"Parameters"ValidCommunities]
下,将public的名称修改成其它的名称就可以了。
如果要限定允许的ip才可以进行SNMP查询,可以进入
[HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"SNMP"Parameters"PermittedManagers]
添加字符串,名称为“1”,内容为要允许的主机IP。
当然,如果允许多台机器的话,就要名称沿用“2、3、4”等名称了。
到这里,基于SNMP的信息刺探与防护策略也基本说完了。
文章里面有很多名称或者解释都是我自己表述的,不够全面和正式,但对初学者来说,应该还是有些帮助的吧
Snmputil 命令
Snmputil是一个命令行下的软件,使用语法如下: usage: snmputil get|getnext|walk] agent community oid [oid ...] snmputil trap
其中agent表示代理进程的IP地址,community表示团体名,oid表示MIB对象ID。
举例说明:
1)查看本地计算机(IP地址为192.168.0.3)的系统信息
通过对系统组的MIB对象的查阅,我们知道系统信息所对应的MIB对象为.1.3.6.1.2.1.1.1(参看系统组对象),我们使用get参数来查询:
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.1.0
Variable = system.sysDescr.0
Value = String Hardware: x86 Family 15 Model 2 Stepping 7 AT/AT COMPATIBLE -
Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)
其中public是192.168.0.3计算机上的团体名,.1.3.6.1.2.1.1.1.0是对象实例,注意对象ID前面要加一个点".",后面还要加一个"0"。如果不在对象ID末尾加上一个0,那么用get参数查询就会出错。从查询结果中我们能够看出操作系统版本和CPU类型。
2)查询计算机连续开机多长时间
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.3.0
Variable = system.sysUpTime.0
Value = TimeTicks 447614
如果我们在对象ID后面不加0,使用getnext参数能得到同样的效果:
C:>snmputil getnext 192.168.0.3 public .1.3.6.1.2.1.1.3
Variable = system.sysUpTime.0
Value = TimeTicks 476123
3)查询计算机的联系人
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.4.0
Variable = system.sysContact.0
Value = String administrator
以上简单介绍了用snmputil查询代理进程的方法,由于在命令行下使用,可能大家感到颇为不方便,但命令行的一个好处就是可以促进大家主动查阅MIB对象,加深对SNMP网络管理的认识。
4)使用walk查询设备上所有正在运行的进程:
C:>snmputil walk 192.168.0.3 public .1.3.6.1.2.1.25.4.2.1.2
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.1
Value = String System Idle Process
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.4
Value = String System
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.292
Value = String snmputil.exe
Variable = host.hr
SWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.308
Value = String RavTimer.exe
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.336
Value = String RavMon.exe
限于篇幅笔者就不把所有进程列出来,大家可以在自己的计算机上面实验,以加强感性认识。
5)查询计算机上面的用户列表
C:>snmputil walk 192.168.0.3 public .1.3.6.1.4.1.77.1.2.25.1.1
Variable = .iso.org.dod.internet.private.enterprises. lanmanager.lanmgr-2.server.
svUserTable.svUserEntry.svUserName.4.117.115.101.114
Value = String user
Variable = .iso.org.dod.internet.private.enterprises. lanmanager.lanmgr-2.server.
svUserTable.svUserEntry.svUserName.5.71.117.101.115.116
Value = String Guest
Variable = .iso.org.dod.internet.private.enterprises. lanmanager.lanmgr-2.server.svUserTable.svUserEntry. svUserName.13.65.100.109.105.110. 105.115.116.114.97.116.111.114
Value = String Administrator
从中我们可以得知该计算机共有三个用户,它们分别为user、guest和administrator。
Snmputil还有一个trap的参数,主要用来陷阱捕捉,它可以接受代理进程上主动发来的信息。如果我们在命令行下面输入snmputil trap后回车,然后用错误的团体名来访问代理进程,这时候就能收到代理进程主动发回的报告。
在MIBII中总共有175个对象,每个对象均有其不同的含义,我们只有通过查阅MIB才能知道它们各自的作用。MIB对象是SNMP网络管理中的核心内容,只有深入了解MIB对象的含义我们才有可能知道如何去驾驭SNMP网络管理。
SNMP中MIB
1. SNMP基本原理
SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图10是NMS公司网络产品中SNMP协议的实现模型。
SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图
版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。
团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息
协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。
2. 管理信息库MIB
IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。
下图给出了NMS系统中SNMP可访问网络设备的对象识别树(OID:Object Identifier)结构。
下图给出了对一个DS1线路状态进行查询的OID设置例子。
3. SNMP的五种消息类型
SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap
- Get-Request 、Get-Next-Request与Get-Response
SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get- Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。如:首先通过下面的原语获得所要查询的设备的接口数:
{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifNumber(2)}
后再通过下面的原语,进行查询(其中第一次用Get-Request,其后用Get-Next-Request):
{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifTable(2)} - Set-Request
SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。 - Trap
SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生。
SNMP管理信息库MIB
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。
管理信息库的对象命名举例
对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的饿一个(标号3)是被标识的组织。在其下面有一个美国国防部(Department of Defense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB- II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。
最初的结点mib将其所管理的信息分为8个类别,见表1。现在de mib-2所包含的信息类别已超过40个。
表1 最初的结点mib管理的信息类别
类别 |
标号 |
所包含的信息 |
system interfaces address translation ip icmp tcp udp egp |
(1) (2) (3) (4) (5) (6) (7) (8) |
主机或路由器的操作系统 各种网络接口及它们的测定通信量 地址转换(例如ARP映射) Internet软件(IP分组统计) ICMP软件(已收到ICMP消息的统计) TCP软件(算法、参数和统计) UDP软件(UDP通信量统计) EGP软件(外部网关协议通信量统计) |
应当指出,MIB的定义与具体的网络管理协议无关,这对于厂商和用户都有利。厂商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本的MIB的多个路由器。当然,一个没有新的MIB项目的路由器不能提供这些项目的信息。
这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为 11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用 SNMP进行管理。