Що таке SNMP, Інтернет і мережа, C / C + +, статті

SNMP розшифровується як Простий Протокол Управління мережею (Simple Network
Management Protocol). SNMP був розроблений з метою вирішити складну проблему
управління мережею. На сьогоднішній день практично всі пристрої так чи інакше
пов’язані з мережею: принтери, маршрутизатори, репітери, мости, багатофункціональні
сервера та настільні комп’ютери. (Єдине, що поки ще не включили в мережу –
це кавоварки, холодильники та порохотяги, але думаю, що скоро настане і їх час:)
Кожне з цих пристроїв має свої параметри, свої налаштування і може
надавати різну інформацію про себе.

SNMP дозволяє безпосередньо через мережу обробляти інформацію від будь-яких
пристроїв, що знаходяться в мережі. Це потужний і, в той же час гнучкий інструмент,
підтримує різні типи структур даних і запитів сумісних з будь-якими
пристроями в мережі.

У моделі SNMP є таке поняття, як програмний агент, який постійно
пов’язаний з мережним пристроєм. У завдання агента входить збирати всю інформацію,
пов’язану з цим пристроєм. До всього іншого, саме агент займається
обробкою прийшов запиту з мережі.

Структура даних SMNP


Дані, оброблені SNMP агентом розбиті на частини, які називаються
“Management information bases” або скорочено MIB. MIB-и описані через мову
визначень під назвою “Abstract Syntax Notation”. Будь-яка програма може
спілкуватися з агентом і обробляти отриману від нього інформацію тільки якщо вона
має MIB агента.

Інформація, що міститься в MIB може описувати необмежену кількість
об’єктів. Кожен об’єкт має унікальний ідентифікатор, званий OID. Простіше
кажучи OID – це послідовність чисел, які ідентифікують об’єкт. Кожен
об’єкт, який може бути оброблений через SNMP, має свій унікальний OID. Всі
існуючі в світі OID-и організовані в одну велику деревоподібну структуру.
Послідовності чисел, які представляють собою OID-и – це ідентифікатори
гілок дерева. Кожне піддерево в дереві призначається IETF, щоб гарантувати
унікальність кожної гілки дерева.

Кожна гілка має ім’я і номер, пов’язані з ним. Відповідно всі об’єкти
SNMP мають приблизно таке ім’я: iso.org.dod.internet яке відповідає числу
1.3.6.1.

Всі основні TCP / IP об’єкти, що містяться всередині піддерев basic,
називаються “засновані на MIB-II”. Визначення MibII можна прочитати в RFC1213.
Читаючи файл MibII, ми можемо побачити, що для того, щоб отримати інформацію від
системи, нам необхідно вважати значення з
iso.org.dod.internet.mgmt.mib-2.system.sysDescr (1.3.6.1.2.1.1.1.0)

Останній числовий ідентифікатор 0, показує, що для того, щоб прочитати
sysDescr, нам необхідно читати скалярний значення.

Скалярні значення досить прості у читанні. Наприклад, щоб вважати поточний
IP адресу нашої машини, нам необхідно прочитати значення iso. org. dod.
internet. mgmt. mib-2. ip. ipAddrTable. ipAddrEntry. ipAddress.
IPADDRESSREALVALUE або 1, 3, 6, 1, 2, 1, 4, 20, 1, 1 ,?,?,?,?. Кожен питаннячко
– Це цифра ip адреси. Припустимо, що IP адресу Вашої машини 123.45.67.89,
тоді Ви отримаєте значення 1, 3, 6, 1, 2, 1, 4, 20, 1, 1, 123, 45, 67, 89.
Естевственно, щоб вважати це значення, треба бути впевненим, що воно
існує.

IpAddress – це елемент таблиці, проіндексованої безпосередньо з цього
адресою. Щоб отримати доступ до деяких об’єктів таблиці, нам необхідно
зіставити їх базові OID з їхніми індексами. У нашому прикладі використовується
deadloop, так як ми повинні знати ip адресу, щоб отримати його!

SNMP вирішує дану проблему підтримкою команди, що дозволяє користувачеві
шукати дані в дереві. Якщо у Вас є даний OID, то Ви можете запитати
значення об’єкта з наступним OID. У нашому випадку, якщо ми будемо запитувати
значення елемента, наступного за 1.3.6.1.2.1.4.20.1.1, то отримаємо повний OID і
значення нашого першого IP інтерфейсу. З повним значенням OID перший інтерфейсу
ми можемо використовувати запит “get next” для отримання IP адрес другого
інтерфейсу і так далі.

Щоб отримати IP маски, необхідно використовувати 1.3.6.1.2.1.4.20.1.3 як
стартовий OID.

SMNP і Windows


Отже, повернемося до нашої DLL-ке. Ця DLL-ка спілкується з агентом через API по
засобам трьох функцій:


Dll так само може підтримувати


Отже, все готово для того, щоб завантажити DLL, змоделювати ініціалізацію
агента, а потім отримати IP адресу, а так само все, що нам необхідно по мимо
цього.

SNMP команди


SNMP має три основних команди – Get, Set, And GetNext. У кожному виклику
SnmpExtensionQuery міститься пристойну кількість даних. У цю функцію
передається структура типу RFC1157VarBindList. Ця структура – список елементів
VarBind, які визначені наступним чином:

typedef struct {
RFC1157VarBind *list;
UINT len;
} RFC1157VarBindList;

typedef struct vb {
AsnObjectName name;
AsnObjectSyntax value;
} RFC1157VarBind;


Структура VarBind містить як ім’я елемента (OID), так і його значення.

Get і Set використовуються для доступу до даних об’єктів, і ми не потребуємо
них, для отримання інформації, якою ми зацікавлені.

GetNext трохи відрізняється від Get і Set. Він використовується для путешевствія по
довгому дереву OID, які підтримує агент. Якщо зробити запит в
SnmpExtensionQuery через GetNext, то функція поверне перше значення, яке
підтримує агент, і воно буде лексикографічно більше того, яким забезпечений
OID.

Як спілкуватися з inetmib1.dll


Щоб приступити до використання DLL-ки, для початку необхідно викликати
функцію SnmpExtensionInit (). Ця функція має 3 параметри – посилання на нульове
час, обробник пастки та ідентифікатор об’єкта для отримання підтримуваного
подання. Для більш повного розуміння цієї функції і її старшого брата
SnmpExtensionInitEx () необхідно більш детальне дослідження snmp розширення
DLL. Тут ми не будемо вугілля в це дослідження, а обмежимося тим, що в
MibII ці значення можна прийняти за промовчанням.

Потім ми робимо виклик Query через запит GetNext, і повоторяем виклик до тих
пір, поки функція не перестане повертати нам ip адреси. Але для цього передамо
у функцію VarBind, що містить:
iso.org.dod.internet.mgmt.mib-2.ip.ipAddrTable.ipAddrEntry.ipAddress (тобто
1,3,6,1,2,1,4,20,1,1) в кожному виклику.

Якщо ми маємо 3 IP адреси 205.5.3.1, 205.5.3.3 і 205.5.3.6, то перший раз ми
отримаємо назад 1,3,6,1,2,1,4,20,1,1,205.5.3.1. Другий –
1,3,6,1,2,1,4,20,1,1,205.5.3.3 і третій – 1,3,6,1,2,1,4,20,1,1,205.5.3.6. І,
нарешті, четвертий раз повертається значення буде виглядати як
1,3,6,1,2,1,4,20,1,2 або як 1,3,6,1,2,1,4,20,1,3. що буде сигналізувати про
те, що функція більше не може отримати ip адрес.

Не забудьте, що функція GetIpAddress завжди буде повертати внутрішній
адреса (127.0.0.1). Він завжди існує.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*