【问题标题】:SNMP DateAndTime, what is expected for a null valueSNMP DateAndTime,空值的预期值
【发布时间】:2017-12-12 21:24:53
【问题描述】:

我在 SNMP 的代理端工作,我有一个 DateAndTime 字段,其语法如下:

日期和时间(八进制字符串)(大小 (8 |11))。提示:2d-1d-1d,1d:1d:1d.1d,1a1d:1d

有问题的 varBind 返回某种类型错误的时间戳,这种错误(希望)永远不会发生。

所以我的问题是如果事件没有发生,代理应该返回什么。如果我返回一个空字符串,则从技术上讲不符合约束。

我不是 SNMP 专家,所以这可以接受吗?

如果我需要这样做,可以将 MIB 更改为不同的定义/类型。

【问题讨论】:

    标签: snmp mib pysnmp


    【解决方案1】:

    代理应通过将error-status 设置为合适的值(例如genErr)来返回传入请求的错误,并将error-index 设置为varbind 中的正确索引。

    PDU ::= SEQUENCE {
               request-id INTEGER (-214783648..214783647),
    
               error-status                -- sometimes ignored
                   INTEGER {
                       noError(0),
                       tooBig(1),
                       noSuchName(2),      -- for proxy compatibility
                       badValue(3),        -- for proxy compatibility
                       readOnly(4),        -- for proxy compatibility
                       genErr(5),
                       noAccess(6),
                       wrongType(7),
                       wrongLength(8),
                       wrongEncoding(9),
                       wrongValue(10),
                       noCreation(11),
                       inconsistentValue(12),
                       resourceUnavailable(13),
                       commitFailed(14),
                       undoFailed(15),
                       authorizationError(16),
                       notWritable(17),
                       inconsistentName(18)
                   },
    
               error-index                 -- sometimes ignored
                   INTEGER (0..max-bindings),
    
               variable-bindings           -- values are sometimes ignored
                   VarBindList
           }
    

    【讨论】:

    • 如果对象是表格的,那么条目将不存在,因此答案是正确的。如果对象是标量,则此答案不正确。
    • “如果这个对象是一个标量,这个答案是不正确的”?你应该在这里多解释一下,因为我根本无法理解你的评论。
    • 谷歌“snmp scalar and tabular”进行讨论。我试图找到一个“保证”标量存在的标准,但没有找到。 RFC 3781 甚至将标量对象定义为“只有一个实例”,但它并没有成为标准。如果您对您有权访问的标量对象执行 GET,则可以保证获得一个值,除非代理不遵循常见做法。
    • @UweInnh LOL,多年来我一直是 SNMP 供应商之一。我的意思是你的描述可能是错误的。我的答案对于标量情况应该完美无缺,但是就像您发现的那样,对于表格情况应该有一些额外的处理。
    • @Uwe 这完全是错误的。为此时无法解析的标量报告错误值并没有错。如果在逻辑上没有某个项目的称为“日期和时间”的资源,那么从逻辑上讲,标量“不存在”(尽管在 MIB 中定义了它的潜在可用性)并用noSuchInstance 响应对它的请求是完美的。请参阅 RFC 3416 4.2.1。
    【解决方案2】:

    MIB 应准确定义在所有情况下会发生什么。这是代理人和经理之间的合同。如果不是,则它是有故障的 MIB。如果是某人正在开发的 MIB,则需要对其进行修复。如果是公共 MIB,请告诉我们哪个,以便我们检查。

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2020-09-10
      相关资源
      最近更新 更多