gpt4 book ai didi

snmp - SNMP代理应该如何响应对没有值(value)的OID的获取请求?

转载 作者:行者123 更新时间:2023-12-01 15:23:22 25 4
gpt4 key购买 nike

是否有响应指示该OID没有值,还是应该什么都不返回?

最佳答案

这取决于。

例如,从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的答案中窃取的链接)

SNMP v2c及更高版本的
  • RFC 3416, 4.2.1 GET请求处理

    4.2.1。 GetRequest-PDU

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

    收到GetRequest-PDU时,接收方SNMP实体进行处理
    变量绑定列表中的每个变量绑定都会产生一个
    响应PDU。 Response-PDU的所有字段具有与以下相同的值
    除非另有说明,否则接收到的请求的相应字段
    下面。每个变量绑定的处理如下:

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

    (3)否则,将变量绑定的value字段设置为
    “noSuchInstance”。

    如果任何变量绑定的处理由于其他原因而失败
    超过上面列出的值,然后使用
    其request-id和variable-bindings字段中的值与
    收到的GetRequest-PDU,其错误状态字段的值设置为
    设置为“genErr”,并且其错误索引字段的值设置为
    变量绑定失败的索引。

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

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

    否则,将生成备用Response-PDU。这个替代
    Response-PDU在其request-id字段中使用相同的值进行格式化
    作为收到的GetRequest-PDU,带有其错误状态的值
    字段设置为“tooBig”,其错误索引字段的值设置为
    零,以及一个空的变量绑定字段。这个替代
    然后将Response-PDU封装到一条消息中。如果大小
    结果消息小于或等于两个本地约束
    以及发起者的最大消息大小,它被发送到
    GetRequest-PDU的始发者。否则,snmpSilentDrops
    [RFC3418]计数器增加,结果消息为
    丢弃。
  • SNMP v1 GET请求处理的
  • RFC 1157, 4.1.2

  • 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字段的值是
    收到消息。

    关于snmp - SNMP代理应该如何响应对没有值(value)的OID的获取请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933513/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com