SNMP学习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近在研究SNMP,因为想在一台交换机上设置一个SNMP的代理,来监控交换机的一些参数,这里我就假设我要监控交换机的某个端口的数据量。

现在说说本人对SNMP的一些看法,当然还有一些问题想和关注过SNMP的朋友一起讨论一下,毕竟自己也是个菜鸟。

先谈一下对SNMP的看法:

SNMP是个很古老的协议,其协议本身并不是很复杂顾名思义,简单网络管理协议。但它也有不简单的地方,那就是MIB库这个东西。这个东西我认为是对被管理对象的一个描述,描述的内容包括类型,名称(也就是OID)等等。转用一个看到过的网站上对MIB比较好的定义。MIB是对设备中各个被管理的对象(Managed Objects)做了一个名字(OID)、数据类型、总体逻辑结构的定义,设备会根据它里面的MIB(或是标准的MIBII,或是企业自己的私有的MIB库),构建一个被管理对象的逻辑数据库,这个数据库里有这些OID及其对应的具体的值(如网友所说的cpu利用率、端口速度等指标的具体值),网管依靠SNMP协议,通过代理的配合工作查询此数据库,找到需要的值,从而达到对设备的监控和管理工作。接下来想问的就是关于SNMP上的一些问题:

1.如果我想在一台交换机上开发一个SNMP代理,那肯定要创建一个私有的MIB库。那是不是就意味着我必须申请一个私有节点?然后在这个节点下来定义我的简单变量和表,那如何去申请这个节点?

2.第二个问题就是关于MIB库和交换机上参数值的问题,交换机上的代理接受到管理站上的get请求后通过MIB库找到那个参数的节点,比如是.1.

3.6.1.

4.1.5000.3。问题来了,那个节点上的值是怎么样传递给MIB的?有些网友说是数据库,那MIB,数据库和交换机上的值是怎么联系到一起的呢?

大部分教科书上关于MIB的入门概念纯粹是扯淡的,事实上单看SNMP协议本身是很简单的,你向他发送“get 1.3.1.1.2.1”,他就根据这个OID给你返回对应的值,其实OID和Web的URL、注册表里键的路径“HKLM\LocalMachine\...\...”是一回事,无非就是数据的分层表达方式而已。SNMP协议本身跟MIB毫不相关,你要是有兴趣用最底层的Socket编程也可以写出一个简单的代理,无非就是根据收到的OID返回对应的数据罢了

至于MIB,只是委员会规范的一些常用OID的标准而已,比如规定这一堆OID描述的是系统的基本信息,那就取名叫RFC1213吧,OID不是以点号分层的吗,这一大堆OID合起来看就是一个树结构了,就和很多工具里看到的一样了。至于MIB的格式,是便于用工具查看或者生成程序框架用的。

那OID对应的数据是放在哪里的呢?如果自己定义一个MIB,肯定是一个键值,一个value值,这样一对一的放置。比如说1.3.1.1.4.0是对应于计算机名(PC100003231)的,我一个GET“1.3.1.1.4.0”过去,那么我就可以在返回值中得到“PC100003231”这么个字符串,但是我不知道MIB存放的方法是怎么样的,我在MIB文件里面只能看出计算机名对应的OID 的树状结构啊。

mib文件只是一个定义这个库是怎样的这样的一个东西啊

就像数据库的脚本

mib文件是用来建库的,怎么存那更简单了,自己实现一个库不就存下去了

至于第一个问题,mib树中的结点是需要申请的,一般公司申请后是放在private结点下,后面的子树就可以自己想怎么搞就怎么搞了怎么申请其实在网上一查就知道了,我那时候

看了一下好像没说要钱,你又不是一个公司,申请这个干嘛呢

要不就自己根据规则写几个mib文件,只要写得正确,一般的解析工具也是能解析出来的介绍你三个工具AdventNet,MIB Browser,Wireshark,用mibbrowser发包,然后wireshark 截包,多看几个就明白了,其实很简单的东西

Agent一般是放网关上,通过snmp去采集网元设备的有用值。然后转发到网管系统处理。你只需找出你感兴趣的网元设备的OID。Agent和网管系统如何通信,可以自己定规则。

要实现Agent可以看看SNMP4JAgent,嵌入式可以看看Agent++

你安装了snmp协议以后MIB库自然就有了,这个库你只要使用就可以了,里面包括了N 多参数。snmp工作原理是管理端发送请求给所有客户端获取或者修改它们的参数值。有个snmp4j的开发包可以做java开发,还是比较简单的。

简单说,就是根据 OID 返回不同的数据。。。

开源有很多相关代码和文件。。

可以使用的。

如果只是刚开始,还是乖乖的学习一下标准的MIB II吧。

出发需要,一般也不需要开发Agent的,多数用的是SNMP提供的那个几个get,getnext等

我发现楼上的很多人都不明白我要阐述的意思我现在想知道的不是怎么通过OID去GET数据而是想自己去自定义一个OID 也就是说去扩张MIB库因为公司有自己的设备所以普通的SNMP自带的MIB库是满足不了需求的希望有达人能解答

MIB只是一份定义文件,让客户端知道怎么调

服务器端的SNMP可以用SUN 的OpenDMK,它可以根据你的MIB文件生成Java类,每一个OID都有对应的方法,你只要在方法里面返回值就可以了,不必去考虑SNMP处理的细节。

客户端OpenDMK也有,或者是用Snmp4j,非开源的有一个国产的ObjectSNMP

MIB只是定义了一个树形结构用来唯一标识有用的变量,它不涉及变量值的存储,你每次向代理发命令查询到的都是当前的变量值,也就是说设备上是不存储历史数据的,你要想做统计的话,可以将历史数据存储在管理端的数据库。尽量往标准MIB上套,实在无法满足要求再自行设计私有MIB

借问!!

讨论这么久,看各位大侠的见解不少,这里有几个初级的知识还不懂,请给解惑

1、MIB以什么存在?是存放到内存中?还是一个实实在在的文件?

2、我们所说的snmp4j也好,命令snmpwalk也好,是读取的指定位置的MIB文件?还是读的什么东西?

3、如果我想把MIB包含的数据,拿到本地计算机中,有什么办法吗?能整体拿到吗?目的就是本地分析的话比较灵活

1.mib库(管理信息库)存放在内存中,mib文件(用来解析得到mib库的文件)是一些实实在在的文件

2.读取mib库的一个结点,叶子或者非叶子都可以

相关文档
最新文档