Введение
При подключении устройства к системе мониторинга по SNMP довольно быстро возникает вопрос: какой OID необходимо использовать для получения нужного параметра?
Например, требуется получить температуру с подключённого к контроллеру NetPing датчика. В документации указывается вида:
- 1.3.6.1.4.1.25728.8800.1.1.2.1
По самому набору чисел определить назначение объекта практически невозможно. Для этого используется MIB: он связывает числовые идентификаторы SNMP с понятными именами и описывает структуру доступных объектов, типы данных и допустимые операции.
При первом открытии MIB-файл может показаться сложным. Однако для большинства практических задач не требуется изучать его целиком или подробно разбираться в языке ASN.1. Достаточно понимать устройство дерева OID и несколько основных конструкций.
В этой статье мы подробно и на понятных примерах разберем, как устроена технология SNMP, научимся читать MIB-файлы оборудования NetPing на примере устройства Netping IO v5, извлекать из них OID и выполнять запросы с помощью утилит Net-SNMP.
Что такое SNMP
SNMP (Simple Network Management Protocol) — это стандартный сетевой протокол, позволяющий системам мониторинга обмениваться информацией с сетевыми устройствами (коммутаторами, роутерами, контроллерами).
Обмен информацией по SNMP строится на двух ключевых концепциях:
- Запрос–ответ (Polling / Опрос): Сервер мониторинга периодически спрашивает у устройства: «Какая сейчас температура на датчике №1?» или отправляет команду: «Включи реле №2».
- Асинхронные события (Traps / Трапы): Устройство само отправляет экстренное сообщение на сервер мониторинга, не дожидаясь опроса: «Внимание! Зафиксирована протечка воды!».
Что такое OID
OID — это уникальный цифровой адрес конкретного параметра внутри устройства. Все OID организованы в единую глобальную иерархическую структуру — дерево SMI (Structure of Management Information), напоминающую файловую систему.
iso(1)
└── org(3)
└── dod(6)
└── internet(1)
└── private(4)
└── enterprises(1)
└── NetPing / LightCom (25728)
└── ...
Каждая цифра в OID обозначает шаг вглубь по веткам этого дерева. Префикс .1.3.6.1.4.1.25728 — это частная ветка (Vendor Enterprise OID) бренда NetPing. Всё, что находится внутри этой ветки, описывает функции конкретных устройств NetPing.
Что такое MIB
MIB-файл — это текстовый файл-словарь, который переводит числовые OID в понятные человеку текстовые имена и описывает, какие данные хранятся по этим адресам.
Важно: MIB-файл не хранит текущую температуру или статус реле внутри себя. Это лишь «схема» или «карта памяти» устройства, позволяющая человеку и программам правильно интерпретировать данные.
В MIB NetPing IO v5 узел с идентификатором 25728 называется lightcom и определяется непосредственно внутри стандартной ветки enterprises.
Ниже него располагаются функциональные ветки устройства. Например:
- 8800 — npThermo, параметры термодатчика;
- 8900 — npIn, дискретные входы;
- 8920 — npOut, дискретные выходы.
Рассмотрим путь до OID текущего значения температуры:
- 1.3.6.1.4.1.25728.8800.1.1.2.1
После корпоративной ветки 25728 путь можно разобрать следующим образом:
1 → npThermoTable — таблица параметров;
1 → npThermoEntry — строка таблицы;
2 → npThermoValue — текущее значение температуры;
1 → индекс термодатчика.
При загруженном MIB вместо длинной последовательности чисел программное обеспечение может отображать понятное человеку представление объекта.

Скалярные и табличные данные: Зачем нужна точка и индекс на конце?
В SNMP все параметры делятся на два типа:
- Скалярные параметры: Существуют в устройстве в единственном экземпляре (например, системное время или имя контроллера). К OID скалярного параметра на конце всегда добавляется `.0`.
- Табличные параметры: Описывают группы однотипных датчиков или портов (например, 4 реле или 8 термодатчиков). Для доступа к конкретному значению из таблицы в конце OID указывается индекс строки (номер датчика или входа).
Базовый OID объекта npThermoValue: 1.3.6.1.4.1.25728.8800.1.1.2
Индекс первого термодатчика: .1
Полный OID для запроса: 1.3.6.1.4.1.25728.8800.1.1.2.1
Где взять MIB NetPing
MIB следует брать для конкретной модели устройства и используемой версии встроенного ПО.
На странице NetPing IO v5 в разделе «Документация и файлы» размещены руководство пользователя, описание встроенного ПО, прошивка, MIB и другие технические файлы. На момент подготовки статьи для устройства опубликован MIB DKSE 58.1.14.MB.mib.
Использовать MIB другого устройства только потому, что оно также относится к NetPing, не следует. Набор доступных объектов зависит от модели и встроенного ПО.
Анатомия MIB-файла
MIB представляет собой текстовый файл с формальным описанием объектов. Его можно открыть обычным текстовым редактором.
MIB-файлы пишутся на формальном языке ASN.1. Чтобы извлечь из них пользу, не нужно изучать этот язык целиком — достаточно знать основные секции.
В начале MIB NetPing IO v5 находится имя модуля:
DKSF-58-1-X-X-1 DEFINITIONS ::= BEGIN
Далее расположен блок IMPORTS. В нём перечисляются определения, которые используются из стандартных MIB-модулей. Например, рассматриваемый файл импортирует OBJECT-TYPE и MODULE-IDENTITY из SNMPv2-SMI, DisplayString из SNMPv2-TC и другие определения.
Основная конструкция, с которой приходится работать при поиске параметров, — OBJECT-TYPE.
Например, объект температуры в MIB NetPing IO v5 описан следующим образом:
npThermoValue OBJECT-TYPE
SYNTAX INTEGER (-60..280)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Temperature, deg.C"
::= { npThermoEntry 2 }
Разберём это определение.
npThermoValue — текстовое имя объекта (MIB-имя).
OBJECT-TYPE указывает, что перед нами определение объекта SNMP.
SYNTAX INTEGER (-60..280) — тип данных (целое число) и допустимый диапазон значений.
MAX-ACCESS read-only означает, что объект доступен только для чтения.
STATUS current указывает, что определение является актуальным.
DESCRIPTION содержит описание назначения объекта — в данном случае это температура в градусах Цельсия.
::= { npThermoEntry 2 } показывает положение объекта относительно родительского узла: npThermoValue имеет идентификатор 2 внутри npThermoEntry.
Для практической работы в первую очередь следует обращать внимание на имя объекта, его положение в дереве, SYNTAX, MAX-ACCESS и DESCRIPTION.
Практика: Поиск нужного параметра в MIB-файле
Способ 1. Визуализация через MIB Browser (для новичков)
Для быстрого освоения рекомендуем использовать графические MIB-браузеры (например, iReasoning MIB Browser или ManageEngine MIB Browser):
- Загрузите файл .mib через меню File -> Load MIBs.
- В левой панели раскройте дерево iso -> org -> dod -> internet -> private -> enterprises -> lightcom.
- Кликните по нужному параметру — утилита сама соберет полный числовой OID и покажет его свойства.

Способ 2. Поиск через текстовый редактор
Вы можете открыть файл в любом редакторе и выполнить поиск по ключевым словам (например, Relay, Thermo, Humidity).
Предположим, необходимо получать температуру датчика, подключённого к NetPing IO v5. В MIB сначала находим температурную ветку:
npThermo OBJECT IDENTIFIER::={ lightcom 8800 }
Внутри неё находится таблица:
npThermoTable OBJECT-TYPE
SYNTAX SEQUENCE OF npThermoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Thermo control table"
::= { npThermo 1 }
а внутри таблицы — строка:
npThermoEntry OBJECT-TYPE
SYNTAX npThermoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Thermo table row"
INDEX { npThermoSensorN }
::= { npThermoTable 1 }
Среди объектов строки находим npThermoValue:
npThermoValue OBJECT-TYPE
SYNTAX INTEGER (-60..280)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Temperature, deg.C"
::= { npThermoEntry 2 }
Определение показывает, что это целочисленное значение температуры, доступное только для чтения.
Используя значения положения объектов относительно родительского узла, получаем путь до объекта:
1.3.6.1.4.1.25728.8800.1.1.2
Для NetPing IO v5 используется один термодатчик 1-Wire, а объект его номера в MIB имеет диапазон (1..1):
npThermoNum OBJECT-TYPE
SYNTAX INTEGER (1..1)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The N of thermo sensor"
::= { npThermoEntry 1 }
Поэтому для получения текущей температуры используется экземпляр с индексом 1. Полный OID:
1.3.6.1.4.1.25728.8800.1.1.2.1
В той же строке таблицы находятся связанные параметры
Например:
- npThermoStatus — состояние температуры;
- npThermoMemo — текстовая памятка;
- npThermoValuePrecise — значение температуры с дробной частью.
Это один из полезных приёмов при чтении MIB: найдя нужный объект, стоит посмотреть соседние определения в той же таблице или ветке. Часто там находятся дополнительные параметры того же датчика или функции:
npThermoEntry ::= SEQUENCE {
npThermoSensorN INTEGER,
npThermoValue INTEGER,
npThermoStatus INTEGER,
npThermoMemo DisplayString,
npThermoValuePrecise FixedPoint1000
}
Выполнение SNMP-запросов с помощью Net-SNMP
Для работы из командной строки можно использовать Net-SNMP.
Утилиты Net-SNMP — это стандартный набор консольных инструментов для работы с SNMP в Linux и Windows. Для рассматриваемой задачи особенно полезны следующие утилиты:
- snmptranslate — работа с MIB и преобразование OID;
- snmpget — получение значения конкретного объекта;
- snmpwalk — последовательный опрос ветки объектов;
- snmpset — запись значения в объект, если она поддерживается.
Официальный сайт Net-SNMP:
Установка и работа с утилитами рассматривались в статье Управление устройствами NetPing из командной строки в Linux и Windows.
Как загрузить MIB NetPing в Net-SNMP
Чтобы Net-SNMP распознавал символьные имена объектов NetPing, соответствующий MIB необходимо сделать доступным программе.
Каталоги поиска MIB зависят от операционной системы, способа установки и конфигурации Net-SNMP. При необходимости каталог можно указать явно параметром -M, а загружаемый модуль — параметром -m.
В загруженном MIB NetPing IO v5 имя модуля указано в первой строке:
DKSF-58-1-X-X-1 DEFINITIONS ::= BEGIN
Поэтому общий пример загрузки выглядит так:
snmptranslate -M +<каталог_с_MIB> \
-m +DKSF-58-1-X-X-1 \
-IR -On <имя_объекта>
При этом сам файл называется DKSE_58.1.14.MB.mib, а имя MIB-модуля внутри файла — DKSF-58-1-X-X-1. Это разные сущности: при работе с параметром -m следует ориентироваться именно на имя модуля, объявленное внутри MIB.
Если при загрузке появляется сообщение об отсутствующем модуле, необходимо проверить блок IMPORTS. MIB NetPing IO v5 использует определения из SNMPv2-SMI, SNMPv2-TC и SNMPv2-MIB, поэтому эти модули также должны быть доступны Net-SNMP.
Изучение структуры через snmptranslate
Для изучения MIB полезна утилита snmptranslate.
Она не выполняет запрос к контроллеру. Утилита работает с MIB-файлами и позволяет преобразовывать символьные и числовые представления OID, получать описание объекта и просматривать дерево.
Например, параметр -On позволяет вывести числовое представление OID:
snmptranslate -m +DKSF-58-1-X-X-1 -IR -On npThermoValue
# Вывод:
.1.3.6.1.4.1.25728.8800.1.1.2
Параметр -IR позволяет искать объект по его символьному имени без указания полного пути в дереве MIB.
Если необходимо получить подробную информацию об объекте, используется -Td:
snmptranslate -m +DKSF-58-1-X-X-1 -IR -Td npThermoValue
# Вывод:
DKSF-58-1-X-X-1::npThermoValue
npThermoValue OBJECT-TYPE
-- FROM DKSF-58-1-X-X-1
SYNTAX INTEGER (-60..280)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Temperature, deg.C"
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) lightcom(25728) npThermo(8800) npThermoTable(1) npThermoEntry(1) 2 }
В выводе можно увидеть определение объекта, его SYNTAX, права доступа, STATUS, DESCRIPTION и положение в дереве.
Для просмотра дерева MIB используется -Tp:
snmptranslate -m +DKSF-58-1-X-X-1 -IR -Tp npThermoEntry
# Вывод:
+--npThermoEntry(1)
| Index: npThermoSensorN
|
+-- -R-- INTEGER npThermoNum(1)
| Range: 1
+-- -R-- INTEGER npThermoValue(2)
| Range: -60..280
+-- -R-- EnumVal npThermoStatus(3)
| Values: failed(0), low(1), norm(2), high(3)
+-- -R-- String npThermoMemo(6)
| Textual Convention: DisplayString
| Size: 0..255
|
+--npThermoValuePrecise(7)
Таким образом, snmptranslate можно использовать как консольный инструмент для изучения MIB ещё до выполнения запросов к самому устройству.
Практические команды запросов к устройству NetPing
snmpget — Чтение одиночного параметра
Предположим, NetPing IO v5 имеет IP-адрес: 192.168.0.100
Необходимо получить температуру подключённого термодатчика.
Мы уже определили его OID:
- 1.3.6.1.4.1.25728.8800.1.1.2.1
NetPing IO v5 поддерживает SNMP v1, а получение значений выполняется с помощью GET-запросов:
snmpget -v1 -c SWITCH 192.168.0.100 1.3.6.1.4.1.25728.8800.1.1.2.1
Где:
- -v1 — версия SNMP,
- SWITCH — настроенное на устройстве community для чтения,
- 192.168.0.100 — фактический IP-адрес контроллера,
- 1.3.6.1.4.1.25728.8800.1.1.2.1 — OID температуры.
Если MIB корректно загружен в Net-SNMP, при работе можно использовать символьные имена вместо длинных числовых OID:
snmpget -v1 -c SWITCH 192.168.0.100 npThermoValue.1
# Вывод:
DKSF-58-1-X-X-1::npThermoValue.1 = INTEGER: 24
snmpwalk — Обход ветки (Сканирование)
Если необходимо посмотреть сразу группу объектов, используется snmpwalk.
Например, можно выполнить обход ветки термодатчика:
snmpwalk -v1 -c SWITCH 192.168.0.100 npThermo
# Вывод:
DKSF-58-1-X-X-1::npThermoNum.1 = INTEGER: 1
DKSF-58-1-X-X-1::npThermoValue.1 = INTEGER: 24
DKSF-58-1-X-X-1::npThermoStatus.1 = INTEGER: norm(2)
DKSF-58-1-X-X-1::npThermoEntry.4.1 = INTEGER: 10
DKSF-58-1-X-X-1::npThermoEntry.5.1 = INTEGER: 60
DKSF-58-1-X-X-1::npThermoMemo.1 = STRING: Termo1
DKSF-58-1-X-X-1::npThermoValuePrecise.1 = INTEGER: 24000
Где:
- SWITCH — настроенное на устройстве community для чтения,
- npThermo — ветка OID, которую необходимо обойти.
Вместо запроса одного объекта утилита последовательно проходит указанную ветку.
Такой способ особенно полезен при первоначальном изучении устройства. Можно посмотреть, какие объекты фактически возвращаются, сопоставить их с MIB и выбрать необходимые OID для системы мониторинга.
При этом MIB и snmpwalk решают разные задачи. MIB описывает структуру и назначение объектов, а snmpwalk показывает значения, которые фактически возвращает конкретное устройство.
snmpset — Управление устройством (Запись значений)
Через SNMP можно не только получать информацию, но и изменять некоторые параметры устройства. Возможность записи определяется MAX-ACCESS в MIB.
Например, состояние дискретного входа NetPing IO v5 описывается объектом npInLevel:
npInLevel OBJECT-TYPE
SYNTAX INTEGER {
off(0),
on(1)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION "State input line read"
::={npInEntry 2}
Поскольку указан read-only, значение можно получить по SNMP, но изменить его нельзя.
Для дискретного выхода используется объект npOutLevel:
npOutLevel OBJECT-TYPE
SYNTAX INTEGER {
flip(-1),
low(0),
high(1)
}
MAX-ACCESS read-write
STATUS current
DESCRIPTION "Output level, 0 or 1.
Write -1 to flip output."
::= { npOutEntry 3 }
Здесь read-write означает, что объект допускает как чтение, так и запись. MIB также определяет допустимые значения: 0 — низкий уровень, 1 — высокий, а запись -1 переключает текущее состояние выхода.
Для записи с помощью Net-SNMP используется snmpset:
snmpset -v1 -c SWITCH 192.168.0.100 npOutLevel.1 i 1
# Вывод:
DKSF-58-1-X-X-1::npOutLevel.1 = INTEGER: on(1)
Где:
- SWITCH — настроенное на устройстве community для записи,
- npOutLevel.1 — OID состояния выхода №1.
- i — тип данных (INTEGER).
- 1 — отправляемое значение (high).
Одного MAX-ACCESS read-write недостаточно для безопасного выполнения команды. Перед записью необходимо также проверить SYNTAX и DESCRIPTION: они показывают тип данных, допустимые значения и назначение объекта.
Асинхронные уведомления: SNMP Traps
Постоянный опрос датчика раз в минуту может привести к задержке в реагировании. Для мгновенных аварийных событий NetPing использует SNMP Traps.
В MIB-файле аварийные события описываются специальным блоком NOTIFICATION-TYPE:
npThermoTrapEvent NOTIFICATION-TYPE
OBJECTS {
npThermoTrapN,
npThermoTrapValue,
npThermoTrapStatus,
npThermoTrapLowLimit,
npThermoTrapHiLimit,
npThermoTrapMemo
}
STATUS current
DESCRIPTION
"Thermo notify event"
::= { npThermoTrapAllEvents 1 }
Когда температура превышает норму, контроллер NetPing сам отправляет SNMP Trap пакет на порт 162/UDP сервера мониторинга. Для приема и обработки таких сообщений в Linux используется демон snmptrapd. MIB-файл в данном случае выступает в роли словаря-переводчика, который позволяет серверу мониторинга автоматически расшифровывать OID от контроллера в понятные названия параметров и правильную структуру данных.
Типичные проблемы при работе с MIB
Одна из распространённых ситуаций — числовой OID успешно работает через snmpget, а символьное имя утилиты Net-SNMP не распознают.
В таком случае проблема может быть связана именно с загрузкой MIB. Следует проверить каталог с MIB, имя загружаемого модуля и его зависимости.
Другая типичная ошибка — неправильная интерпретация индекса. Для объектов, организованных в виде таблиц, необходимо определить, какое значение используется в качестве индекса строки: номер датчика, входа, выхода или другого экземпляра.
При использовании snmpset дополнительно необходимо проверять права доступа, тип и допустимые значения. Тот факт, что OID существует и успешно читается, ещё не означает, что в него разрешена запись.
Наконец, необходимо различать проблемы MIB и проблемы самого SNMP-доступа. MIB нужен для интерпретации объектов, но наличие MIB не влияет на сетевую доступность устройства, правильность community или настройки SNMP на контроллере.
Заключение
MIB-файл может выглядеть сложным при первом знакомстве, но для большинства задач мониторинга не требуется изучать весь синтаксис ASN.1 или разбирать файл строка за строкой.
Достаточно понимать, что доступные через SNMP параметры имеют своё место в дереве OID, а MIB описывает их имена, типы данных, права доступа и назначение.
При работе с оборудованием NetPing следует использовать MIB для конкретной модели и соответствующей версии встроенного ПО. Найдя нужный объект, его можно исследовать с помощью snmptranslate, получить значение через snmpget, выполнить обход ветки с помощью snmpwalk или изменить доступный для записи объект через snmpset.
Так MIB превращается из сложного на первый взгляд технического файла в практический справочник для настройки SNMP-мониторинга и интеграции оборудования NetPing с внешними системами.