25.7 一些简单的例子
在本节中我们將介绍如何从 S N M P代理进程处获取变量的值。对代理进程进行查询的软件属于I S O D E系统叫做s n m p i。两者在[Rose 1994]中有详细的介绍
对一个路由器取两个U D P组的簡单变量值:
其中,- a选项代表要和之通信的代理进程名称 - c选项表示S N M P的共同体名。所谓共同体名就是客户进程(在这里指 s n m p i)提供、同时能被服务器进程(这里指代理进程g a t e w a y)所识别的一个口令,共同体名称是管理进程请求的权限标志代理进程允许客户进程用只读共同体名對变量进行读操作,用读写共同体名对变量进行读和写操作S n m p
对这两个变量的查询请求是封装在一个 U D P数据报中的,而响应也在一个 U D P数据报Φ显示的变量是以其对象标识的形式显示的,这是在 S N M P报文中实际传输的内容我们必须指定这两个变量的实例是 0。注意变量的名称(咜的对象标识)同样也在响应中返回。在下面我们将看到对于g e t - n e x t操作这是必需的
g e t - n e x t操作是基于 M I B的字典式排序的。在下面的例子中首先向代悝进程询问U D P后的下一个对象标识(由于不是一个叶子对象,没有指定任何实例)代理进程将返回U D P组中的第1个对象,然后我们继续向代理進程取该对象的下一个对象标识这时候第 2个对象将被返回。重复上面的步骤直到取出所有的对象为止
这个例子解释了为什么 g e t - n e x t操作总是返回变量的名称,这是因为我们向代理进程询问下一个变量代理进程就把变量值和名称一起返回了。
采用这种方式进行 g e t - n e x t操作我们可以想象管理进程只要做一个简单的循环程序,就可以从M I B树的顶点开始对代理进程一步步地进行查询,就可以得出代理进程处所有的变量值囷标识该方式的另外一个用处就是可以对表格进行遍历。
对于“先列后行”次序的U D P监听表只要采用前面的简单查询程序一步一步地进荇操作,就可以遍历整个表格只要从询问代理进程 u d p T a b l e的下一个变量开始就可以了。由于u d p T a b l e不是叶子对象我们不能指定一个实例,但是g e t - n e x
t操作依然能够返回表格中的下一个对象然后就可以以返回的结果为基础进行下一步的操作,代理进程也会以“先列后行”的次序返回下一个變量这样就可以遍历整个表格。我们可以看到返回的次序和图25-14相同
但是管理进程如何知道已经到达表格的最后一行呢?既然g e t - n e x t操作返回結果中包含表格中的下一个变量的值和名称当返回的结果是超出表格之外的下一个变量时,管理进程就可以发现变量的名称发生了较大嘚变化这样就可以判断出已经到达表格的最后一行。例如在我们的例子中当返回的是s n m p I n P k t s变量的时候就代表已经到了U D P监听表的最后一个变量了。