处理递增的SNMP OID?

时间:2011-05-11 15:25:01

标签: c# snmp

我正在尝试使用SNMP从打印机获取数据。如果我打开和关闭打印机,get所需的OID为.1.3.6.1.2.1.43.18.1.1.8.1.1。每次打印机出现“事件”时,例如暂停,缺纸或卡纸,我想要的数据的OID会增加。

例如,我打开打印机并查询.1.3.6.1.2.1.43.18.1.1.8.1.1.,我将“暂停”作为值。我取消暂停打印机并从打印机中取出所有纸张,并获取“添加纸张”消息,我必须查询.1.3.6.1.2.1.43.18.1.1.8.1.2

我不知道这是否是正常的SNMP行为,但我想知道在这些情况下人们建议我能以编程方式获取打印机状态吗?

2 个答案:

答案 0 :(得分:4)

是的,您正在从警报表中检索行是正常的:

看看mib:

enter image description here

mib的相应文本部分是(from RFC 1759):

prtAlertTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF PrtAlertEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        ""
    ::= { prtAlert 1 }

prtAlertEntry OBJECT-TYPE
    SYNTAX     PrtAlertEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        "Entries may exist in the table for each device
        index who's device type is `printer'."
    INDEX  { hrDeviceIndex, prtAlertIndex }
    ::= { prtAlertTable 1 }

PrtAlertEntry ::= SEQUENCE {
    prtAlertIndex               Integer32,
    prtAlertSeverityLevel       INTEGER,
    prtAlertTrainingLevel       INTEGER,
    prtAlertGroup               INTEGER,
    prtAlertGroupIndex          Integer32,
    prtAlertLocation            Integer32,
    prtAlertCode                INTEGER,
    prtAlertDescription         OCTET STRING,
    prtAlertTime                TimeTicks
}

因此,SNMP工作的方式是通过行的索引为MIB的OID条目添加后缀。您可以通过Get-Bulk获取整个表,但我认为您首先要了解如何检索SNMP表。

在您确切的情况下:1.3.6.1.2.1.43.18.1.1.8.1.1您必须将其视为:

1.3.6.1.2.1.43.18.1.1.8:prtAlertDescription后跟

1:hrDeviceIndex后跟

1:作为行的prtAlertIndex。

建议您可以找到一个名为snmpsharpnet的程序集,这对于在.NET之上使用SNMP非常有帮助。

答案 1 :(得分:1)

看起来您的打印机正在存储状态列表。您必须从OID .1.3.6.1.2.1.43.18.1.1.8.1.1开始批量处理并使用该组中的最后一个变量绑定。