![Почему вывод snmpget отличается, если определена переменная среды MIBS?](https://rvso.com/image/782622/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%20snmpget%20%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B0%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D1%81%D1%80%D0%B5%D0%B4%D1%8B%20MIBS%3F.png)
$ export MIBS=
$ snmpget -Oqv -v 2c -c public 10.xxx.yyy.zzz .1.3.6.1.4.1.3375.2.1.14.3.2.0
"ACTIVE"
но
$ export MIBS=F5-BIGIP-SYSTEM-MIB
$ snmpget -Oqv -v 2c -c public 10.xxx.yyy.zzz .1.3.6.1.4.1.3375.2.1.14.3.2.0
ACTIVE
Почему такая разница в выводе, если переменные среды MIBS имеют значение?
решение1
MIB SNMP определяет типы данных для ваших OID SNMP, поэтому при загрузке MIB он может отображать «отформатированную» версию значения, а не отображать необработанное значение.
Например, сравните:
MIBS= snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.3.1
iso.3.6.1.2.1.2.2.1.3.1 = INTEGER: 24
С:
$ snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.3.1
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
При загрузке MIB-файлов snmpget
знает, как интерпретировать значение.
В конкретном случае в вашем вопросе MIBS говорит: «отобразить это значение в виде строки».
решение2
Если быть более конкретным.
Без документов MIB инструмент SNMP может определить только самые основные типы данных, определенные самим протоколом.
- ЦЕЛОЕ ЧИСЛО
- ОКТЕТНАЯ СТРОКА
- НУЛЕВОЙ
- ИДЕНТИФИКАТОР ОБЪЕКТА
- Айпи адрес
- Счетчик32
- Калибр32
- TimeTicks
- Непрозрачный
- Сетевой адрес
- Счетчик64
Поскольку данные кодируются в формате ASN.1 BER, алгоритм декодирования может извлекать такие типы данных из необработанных байтов, передаваемых по сети.
Таким образом, когда вы запускаете команду NET-SNMP snmpget
без документов MIB, она просто декодирует данные как СТРОКУ ОКТЕТОВ и печатает как "ACTIVE"
.
Однако документы MIB в SMI v1 или v2 позволяют определять настраиваемые типы данных на основе таких базовых типов с помощью так называемых "текстовых соглашений". И в вашем случае документ MIB F5-BIGIP-SYSTEM-MIB
определяет объект .1.3.6.1.4.1.3375.2.1.14.3.2
следующим образом:
sysCmFailoverStatusStatus OBJECT-TYPE
SYNTAX LongDisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The failover status on the system."
::= { sysCmFailoverStatus 2 }
Фактический тип данных LongDisplayString
определен в F5-BIGIP-COMMON-MIB
,
LongDisplayString ::= TEXTUAL-CONVENTION
DISPLAY-HINT "1024a"
STATUS current
DESCRIPTION "A longer version of SNMPv2-TC::DisplayString."
SYNTAX OCTET STRING (SIZE (0..1024))
Таким образом, когда вы просите команду NET-SNMP snmpget
загрузить документы MIB, она полностью распознает тип данных LongDisplayString
и выводит ACTIVE
.
Итак, вы видите, что единственное заметное изменение — это только котировки, многое происходит за кулисами.