Загальна інформація
Знання протоколу SNMP. призначеного для управління і спостереження за пристроями в мережі, дуже корисно при діагностики здоров'я всієї системи. З його допомогою адміністратор може автоматизувати збір статистики з ключових вузлів: комутаторів, маршрутизаторів, комп'ютерів та інших пристроїв підтримують цей протокол. У цій статті ми розглянемо на прикладах, як розуміти і використовувати ключове поняття в SNMP протоколі - базу даних MIB.
Для початку коротко опишемо деякі важливі терміни протоколу SNMP (Simple Network Managment Protocol):
MIB - Managment Information Base - база даних інформацією управління, що зберігає інформацію про всі об'єкти (параметрах і настройках) пристрої.
OID - Object IDentificator - числовий ідентифікатор об'єкта в дереві MIB.
Object Name - ім'я об'єкта, унікальна константа для всього MIB, однозначно відповідна певному OID.
MIB - це структурований текстовий файл або декілька файлів, які містять інформацію про всі об'єкти пристрої. Об'єктом може бути якась настройка або параметри системи. У кожного об'єкта є свій набір полів, таких як тип даних, доступність (читання, запис), статус (обов'язковий, необов'язковий), текстове назва настройки. Також об'єкт може містити інші об'єкти.
Є стандартні MIB'и, що визначаються різними RFC і безліч MIB'ов від виробників обладнання, які доповнюють стандартні і можуть бути взяті з сайтів цих компаній. Ці доповнення необхідні, щоб описати специфічні для пристрою параметри. Можна також скласти і свої MIB'и, ніде їх не реєструвати і успішно використовувати.
Вищенаведений OID (1.3.6.1.2.1.1.5) для об'єкта sysName побудований цілком на стандартному MIB, і буде існувати швидше за все на всіх пристроях. Він читається так:
При роботі з віддаленої системою по SNMP протоколу всі запити відбуваються через OID, що відображає стан об'єкта в дереві об'єктів MIB. Все OID системи можна отримати просканувавши пристрій, наприклад командою snmpwalk:
На жаль, іноді команда не встигає витягнути всі змінні, так як на деяких пристроях їх сильно багато і захист від DOS атак спрацьовує раніше, блокуючи доступ на деякий час. Тому дані іноді зручніше отримувати частково, лише для певної гілки:
Однак, отримані цифрові значення часто не розкривають свого призначення, тому, виникає зворотна задача: дізнатися який OID у цікавить нас об'єкта. Для цього доведеться вивчати MIB пристрою.
Так, для того щоб дізнатися температуру в корпусі Intel Modular Server, возмем MIB описує параметри вентиляторів системи і робимо в ньому пошук слова temperature, знаходимо об'єкт fanFruInletTemperature і дивимося його опис. Ось потрібний нам фрагмент:
Рядок в описі об'єкта fans
говорить про те, що описаний об'єкт буде розширювати об'єкт (бути гілкою в дереві об'єктів) chassis. маючи в ньому індекс 206, а наступний об'єкт fanFruTable в свою чергу буде розширювати об'єкт fans. представляючи в ньому гілку з індексом 1, також fanFruEntry буде першою гілкою у об'єкта fanFruTable. В параметрах fanFruEntry і міститься цікавий для нас fanFruInletTemperature.
де ми дізнаємося, що він міститься в об'єкті components. Далі наскрізний пошук рядка «components OBJECT-IDENTITY» (потрібно врахувати, що пробілів між словами може бути різна кількість) дає рядок:
Далі знаходимо і інше:
Записуючи всі отримані ID об'єктів отримуємо повний OID для температурних датчиків: 1.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16
Тепер можна дізнатися їх значення, заодно з'ясувавши і їх кількість:
snmpwalk -v 2c -c public 10.0.0.1 1.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16
iso.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16.1 = INTEGER: 27
iso.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16.2 = INTEGER: 26
iso.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16.3 = INTEGER: 19
За наведеним нескладному алгоритму можна прочитати будь-який MIB, головне отримати його, що, на жаль, не завжди можливо.
Для полегшення роботи з MIB файлами існує безліч програм як платних, так і безкоштовних, в тому числі і online. Будь-пошуковик на запит MIB browser видасть багато корисних посилань. Я користуюся NuDesign Visual MIBuilder.