Имеете дело с увеличением SNMP OID? - PullRequest
1 голос
/ 11 мая 2011

Я пытаюсь использовать SNMP для получения данных с принтера.Если я выключаю и снова включаю принтер, OID, который мне нужен для get, равен .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 ]

4 голосов
/ 11 мая 2011

Да, это нормально, вы извлекаете строки из таблицы предупреждений:

Просто взгляните на MIB:

enter image description here

Соответствующая текстовая частьmib - это ( из 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 работает так, чтобы суффиксить запись OID MIB к индексу строки.Вы можете получить всю таблицу с помощью 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 , которая очень полезна для работы с SNMP в верхней части .NET.

1 голос
/ 11 мая 2011

Похоже, ваш принтер хранит список состояний. Вы должны получить пакет, начиная с OID .1.3.6.1.2.1.43.18.1.1.8.1.1, и использовать последнюю привязку переменной из группы.

...