SNMP代理如何响应对它没有价值的OID的get请求?

时间:2014-11-14 15:36:13

标签: snmp

是否有回复表明该OID没有任何价值,或者它应该只返回任何内容?

2 个答案:

答案 0 :(得分:3)

这取决于。

例如,从Debian上的SNMP软件包安装的snmpget工具都抱怨缺少OID,并且在某种程度上没有。

以一些基本的SNMP OID为例:

root@debian:~# snmpwalk -v2c -cpublic localhost
...
iso.3.6.1.2.1.1.5.0 = STRING: "debian"
iso.3.6.1.2.1.1.6.0 = STRING: "Sitting on the Dock of the Bay"

当您向其提供缺少的OID时,使用snmpget会抱怨:

root@debian:~# snmpget -v2c -cpublic localhost iso.3.6.1.2.1.1.6.1
iso.3.6.1.2.1.1.6.1 = No Such Instance currently exists at this OID

然而,它将返回零代码,表示它已经"好的"它不存在:

root@debian:~# echo $?
0

如果您正在编写自己从SNMP读取的工具或脚本,那么实际上可以归结为您知道OID缺失/无效的重要性。 I'd recommend checking out the net-snmp documentation/coding tutorials如果你正在寻找权威的例子。

编辑:这里有一些RFC,如果这是你的事情(链接从Lex Li的答案中被盗)

  • RFC 3416, 4.2.1用于SNMP v2c及以上GET请求处理

    4.2.1。 GetRequest-PDU

    生成GetRequest-PDU并根据请求发送 应用

    收到GetRequest-PDU后,接收SNMP实体进行处理 每个变量绑定在变量绑定列表中以产生一个 响应PDU。 Response-PDU的所有字段都具有相同的值 除了指示之外,所接收请求的相应字段 下面。每个变量绑定按如下方式处理:

    (1)如果变量绑定的名称与a的名称完全匹配      此请求可访问的变量,然后是变量      绑定的值字段设置为named的值      变量。 (2)否则,如果变量绑定的名称没有      OBJECT IDENTIFIER前缀与OBJECT完全匹配      可访问的任何(潜在)变量的IDENTIFIER前缀      这个请求,然后它的value字段被设置为" noSuchObject"。

    (3)否则,变量绑定的值字段设置为      " noSuchInstance"

    如果任何变量绑定的处理因其他原因而失败 比上面列出的,响应PDU重新格式化 其request-id和variable-bindings字段中的值相同 收到GetRequest-PDU,并设置其错误状态字段的值 到" genErr",并将其错误索引字段的值设置为 失败的变量绑定的索引。

    否则,设置Response-PDU的错误状态字段的值 to" noError",其错误索引字段的值为零。

    然后将生成的Response-PDU封装到消息中。如果 结果消息的大小小于或等于a 它本地约束和发起者的最大消息大小 被发送到GetRequest-PDU的发起者。

    否则,生成备用响应PDU。这个替代 Response-PDU在其request-id字段中使用相同的值进行格式化 作为收到的GetRequest-PDU,具有其错误状态的值 字段设置为" tooBig",其错误索引字段的值设置为 零,以及一个空的变量绑定字段。这个替代 然后将响应PDU封装到消息中。如果大小了 结果消息小于或等于局部约束 和发送者的最大消息大小,它被发送到 GetRequest-PDU的发起者。否则,snmpSilentDrops [RFC3418]计数器递增,结果消息为 丢弃。

  • RFC 1157, 4.1.2用于SNMP v1 GET请求处理

4.1.2。 GetRequest-PDU

         The form of the GetRequest-PDU is:
              GetRequest-PDU ::=
                  [0]
                      IMPLICIT SEQUENCE {
                          request-id
                              RequestID,

                          error-status        -- always 0
                              ErrorStatus,

                          error-index         -- always 0
                              ErrorIndex,

                          variable-bindings
                              VarBindList
                      }

GetRequest-PDU仅由协议实体生成    请求其SNMP应用程序实体。

收到GetRequest-PDU后,接收协议实体    根据以下列表中的任何适用规则进行回复:

    (1)  If, for any object named in the variable-bindings field,
         the object's name does not exactly match the name of some
         object available for get operations in the relevant MIB
         view, then the receiving entity sends to the originator
         of the received message the GetResponse-PDU of identical
         form, except that the value of the error-status field is
         noSuchName, and the value of the error-index field is the
         index of said object name component in the received
         message.

    (2)  If, for any object named in the variable-bindings field,
         the object is an aggregate type (as defined in the SMI),
         then the receiving entity sends to the originator of the
         received message the GetResponse-PDU of identical form,
         except that the value of the error-status field is
         noSuchName, and the value of the error-index field is the
         index of said object name component in the received
         message.

    (3)  If the size of the GetResponse-PDU generated as described
         below would exceed a local limitation, then the receiving
         entity sends to the originator of the received message
         the GetResponse-PDU of identical form, except that the
         value of the error-status field is tooBig, and the value
         of the error-index field is zero.

    (4)  If, for any object named in the variable-bindings field,
         the value of the object cannot be retrieved for reasons
         not covered by any of the foregoing rules, then the
         receiving entity sends to the originator of the received
         message the GetResponse-PDU of identical form, except
         that the value of the error-status field is genErr and
         the value of the error-index field is the index of said
         object name component in the received message.

如果上述规则均不适用,则接收协议    实体向发起者发送收到的消息    GetResponse-PDU,对于变量中命名的每个对象 -    绑定字段的接收消息,相应的组件    GetResponse-PDU表示其名称和值    变量。 GetResponse的错误状态字段的值 -    PDU为noError,错误索引字段的值为零。该    GetResponse-PDU的request-id字段的值是    收到消息。

答案 1 :(得分:2)

该行为遵循标准RFC文档,如