Протокол SNMP в POSIX-операционных системах.

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение SimpleUser » 04 дек 2012, 20:12

Про Simple Network Managment Protocol(SNMP) слышали многие, но сведений по практическому ПРОГРАММНОМУ применению его для повседневных задач -- проверка-настройка-тестирование аппаратуры, подключённой к сети TCP/IP -- практически нет. Это объясняется достаточно сложной(несмотря на название протокола) структурой составных частей системы(в подавляющем большинстве случаев распределённой), использующей данный протокол взаимодействия. Кроме того для его понимания неплохо бы изучить основы нотации ASN.
Но нельзя не отметить законченность(задокументированы любые мелочи, коих немало) и расширяемость протокола SNMP -- возможно добавлять записи с необходимой пользователю информацией в стандартную базу данных устройств MIB(или MIB II в новых версиях).

На данный момент наиболее используются версия 1 протокола(или просто SNMP) и вторая версия протокола с улучшенной безопасностью(или SNMPv2).

Начнём конечно с SNMP версии 1 -- в ней очень много интересного. Хотя бы то, что в качестве транспортного используется протокол без установления соединения -- UDP. Это даёт системе гибкость "не мешать" прочему сетевому обмену, а также позволяет использовать один и тот же порт для приёма и передачи соообщений -- по умолчанию 161.
Все компоненты системы подразделяются на менеджеров SNMP, производящих опрос оборудования, и агентов, отвечающих на запросы и могущих сигнализировать о неисправностях посылкой специального сообщения trap.

Переменные, в которых хранится вся информация об оборудовании, находятся в Managment Information Base(MIB), связанной с агентом опрашиваемого устройства. Структура переменных представляется в виде дерева, у каждого узла которого существуют идентификатор и текстовое имя(например 1.3.6.1.2.1 это iso.org.dod.internet.mgmt.mib).
Последний раз редактировалось SimpleUser 04 дек 2012, 20:31, всего редактировалось 1 раз.

SimpleUser
Писатель
Сообщения: 69
Зарегистрирован: 02 авг 2012, 14:22
Откуда: Москва
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение SimpleUser » 04 дек 2012, 20:28

Передо мной стоит задача сначала написать свой менеджер SNMP, позволяющий производить опрос подключённого к сети оборудования и устанавливать необходимые значения переменных его MIB. Мой хост -- Fedora17 x64, и для этих благих целей будем использовать Линукс-инструментарий SNMP -- библиотеку C++ Net-SNMP и дополнительные SNMP-utils. Среда разработки предполагается NetBeans, но надо ознакомиться и с Geany.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 04 дек 2012, 20:48

SimpleUser писал(а):Про Simple Network Managment Protocol(SNMP) слышали многие, но сведений по практическому применению его для повседневных задач -- проверка-настройка-тестирование аппаратуры, подключённой к сети TCP/IP -- практически нет.
Да, на удивлением мало описаний практических задач.
Я после вашего сообщения поднял свои работы по SNMP и обнаружил там, кроме прочего, 2 недописанных текста описаний, из которых вполне можно сделать сносное руководство.
SimpleUser писал(а): Это объясняется достаточно сложной(несмотря на название протокола) структурой составных частей системы(в подавляющем большинстве случаев распределённой), использующей данный протокол взаимодействия. Кроме того для его понимания неплохо бы изучить основы нотации ASN.
Но нельзя не отметить законченность(задокументированы любые мелочи, коих немало) и расширяемость протокола SNMP -- возможно добавлять записи с необходимой пользователю информацией в стандартную базу данных устройств MIB(или MIB II в новых версиях).
Да уж, с Simple в названии - это они погорячились ;-)
Я раньше (сейчас посмотрел - это начало 2009г.) работал над SNMP-подсистемой диагностики и контроля сложной комплексной системы >6 мес. (это в режиме полноразмерного рабочего дня 8 час., а иногда и 10). И заказчик/работодатель вполне были готовы платить не такую уже плохую зарплату ежемесячную на протяжении этих 6 мес. - это примерно может служить ориентиром трудоёмкости въезжания всерьёз в SNMP.

Но с SNMP не столько сложно всё, сколько громоздко и замусорено ... протокол старый, и за годы там накопилось много ... суеверий.
И начинать разбираться нужно бы с развеивания этих красивых народных легенд. ;-)
SimpleUser писал(а): Хотя бы то, что в качестве транспортного используется протокол без установления соединения -- UDP. Это даёт системе гибкость "не мешать" прочему сетевому обмену, а также позволяет использовать один и тот же порт для приёма и передачи соообщений -- по умолчанию 161.
Но порт может быть и другой, нестандартный (кстати, обратите внимание), что дефаултный порт 161 - привилегированный (<1024) а это уже потребует прав root.
SimpleUser писал(а): Все компоненты системы подразделяются на менеджеров SNMP, производящих опрос оборудования, и агентов, отвечающих на запросы и могущих сигнализировать о неисправностях посылкой специального сообщения trap.
И это есть 1-е суеверие из области SNMP:
- то, что у всех людей называется: сервер, сервис, служба - они называют агент;
- то, что у всех людей называется: клиент - они называют менеджер;
И этой путанной терминологией создают 1-ю сложность.
Стандартный агент (сервер) net-snmp - это snmpd.
SimpleUser писал(а): Переменные, в которых хранится вся информация об оборудовании, находятся в Managment Information Base(MIB), связанной с агентом опрашиваемого устройства. Структура переменных представляется в виде дерева, у каждого узла которого существуют идентификатор и текстовое имя(например 1.3.6.1.2.1 это iso.org.dod.internet.mgmt.mib).
Это следующие легенды (суеверия):
- идентификаторы (OID) описывают MIB-файлы (соотносящие числовым значениям в OID) символьные имена (из MIB);
- но! - snmpd ничего не знает ни о каких именах из MIB - это всё выдумки для человека, и понимает только числовые OID (это 2-е суеверие);
- у всех возникает первейшим вопрос: как научить стандартный snmpd понимать наши собственные OID? (а это и есть построить свою систему SNMP).
- правильный ответ на это звучит так: а никак. ;-)
- никаких MIB-файлов и прочих красот snmpd никогда не понимал и не поймёт!
- это можно сделать только а). дополнив исходный код snmpd своим кодом обслуживания OID и пересобрав весь проект (а это очень грубо), б). написав свой собственный сервер (агент) и повесив его вместо стандартного snmpd, в). п.б но только не вместо, а запустив его на порту отличного от стандартного 161, г). доделав к snmpd субагент, работающего по специальному протоколу agentx. (вот это всё - есть 3-е суеверие из области SNMPD).

Я пишу по памяти, могу в мелочах ошибаться (запамятовал), но вот это есть ключевые позиции.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 04 дек 2012, 20:57

SimpleUser писал(а):Передо мной стоит задача сначала написать свой менеджер SNMP, позволяющий производить опрос подключённого к сети оборудования и устанавливать необходимые значения переменных его MIB. Мой хост -- Fedora17 x64, и для этих благих целей будем использовать Линукс-инструментарий SNMP -- библиотеку C++ Net-SNMP и дополнительные SNMP-utils. Среда разработки предполагается NetBeans, но надо ознакомиться и с Geany.
С небольшими уточнениями:
- net-snmp это давний GNU проект для всех UNIX (Linux здесь далеко не первый), использующий стандартный C (никаких C++).
- давайте (пока, по крайней мере) очень осторожно употреблять термин MIB (MIB-файлы etc.), он здесь не основной, а вот сами идентификаторы переменных (какого-то вот такого вида: .1.3.6.1.4.1.10901.2.1.5.1) они называют OID. Там у нас в коде даже тип переменных будет соответствующий (из <net-snmp/net-snmp-includes.h>):

Код: Выделить всё

static oid      stateOfModule_oid[] =  { 1, 3, 6, 1, 4, 1, 10901, 1, 1, 2 };
static oid      numberOfMars_oid[] =   { 1, 3, 6, 1, 4, 1, 10901, 1, 1, 3 };
static oid      alarmSpan_oid[] =      { 1, 3, 6, 1, 4, 1, 10901, 1, 1, 6 };
(взято из работающего кода).

Забегая вперёд:
- часть { 1, 3, 6, 1, 4, 1, ... } это идентификаторы узлов обхода дерева от корня - эта часть у вас будет всегда постоянной, вот такой как показано (это стандартизовано стандартом SNMP);
- дальше у вас будет OID вашего корня (вашей фирмы разработчика, вашей группы проектов и т .д.), вот то { ..., 10901, ... };
- а уже далее - ветви вашей собственной иерархии (проект, изделие, отдельные переменные, ...).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 04 дек 2012, 21:01

Olej писал(а): Я после вашего сообщения поднял свои работы по SNMP и обнаружил там, кроме прочего, 2 недописанных текста описаний, из которых вполне можно сделать сносное руководство.
Давно было намерение привести это в систему. И если вы не забросите это разбирательство, и составите компанию, я готов:
- вернуться к этой работе...
- сформировать тестовую задачу (она у меня, собственно, давно есть)
- и провести всё конструирование от начала до конца.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 04 дек 2012, 21:25

Olej писал(а):- сформировать тестовую задачу (она у меня, собственно, давно есть)
Успех такого пробного проекта всегда является итогом того, удастся ли сформировать тестовую задачу как можно проще... "простую как мычание"(с) ;-) , "простую как умывальник"(с).
Вот что-то такого типа, как я прикрепил в архиве:

Примитивная система авторегулирования (якобы ;))...
1. есть регулируемое значение ... (это одна переменная)
2. это значение считывается, и в зависимости от разбалансировки вырабатывается управляющее воздействие (оно записывается во 2-ю переменную)...
3. если в результате записи п.2 разбалансировка всё ещё не нулевая - идём на п.1.

Вот результаты первых прогонов:

Код: Выделить всё

bash-4.2$ ./cli_locl -v
команда (h-подсказка): h
реализованные команды: * ? = h q  
команда (h-подсказка): ?
текущее значение = 0
команда (h-подсказка): * 1.3
усиление = 1.3
команда (h-подсказка): = 200
новое значение = 200
0+260  260-78  182+23  205-7  198+3  201-1  
команда (h-подсказка): ?
текущее значение = 200
команда (h-подсказка): q
bash-4.2$ 

Здесь показано "перерегулирование" (коэффициент петлевого усиления 1.3 > 1), которое выводит регулируемое значение на устойчивое состояние за 5 шагов (чтения + записи).
Это в локальном варианте, когда управляемый "агент" просто тупо прикомпонован к коду "менеджера", подающего команды.
Если теперь регулируемое значение (по чтению) и управляющее воздействие (по записи) отнести на удалённый хост в переменные SNMP, обслуживаемые субагентом - вот вам и модель управления SNMP.
Вложения
snmp.tgz
(2.17 КБ) 604 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 05 дек 2012, 10:52

Olej писал(а):г). доделав к snmpd субагент, работающего по специальному протоколу agentx.
Опережая события, но пока не забыл и не потерял ;-) - вот руководство от работников IBM по написанию кода субагентов: NetSNMP subagent development manual.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 05 дек 2012, 11:08

Инструменты (программные пакеты) SNMP...
Мне здорово повезло, в том смысле, что на сегодня у меня под руках есть достаточно свежая инсталляция системы Linux, дистрибутив Fedora 17 RFR, в которой по умолчанию не установлена SNMP. Поэтому можно по шагам устанавливать только те инструменты SNMP, которые необходимо, и тем придать этому процессу системность.

Код: Выделить всё

bash-4.2$ cat /etc/system-release
RFRemix release 17 (Beefy Miracle)
Убеждаемся, что ничего нет, не установлено, не запущено:

Код: Выделить всё

$ ps -a | grep snmp
$ ls -w120 /lib/systemd/system/*snmp*.service
ls: невозможно получить доступ к /lib/systemd/system/*snmp*.service: Нет такого файла или каталога
$ ls /etc/init.d/*snmp*
ls: невозможно получить доступ к /etc/init.d/*snmp*: Нет такого файла или каталога
2 последние команды нужны для 2-х разных систем инициализации сервисов Linux: старой sysinit и новой systemd.

Код: Выделить всё

$ yum list all net-snmp*
...
Установленные пакеты
net-snmp-libs.i686                     1:5.7.1-4.fc17                     @russianfedora/$releasever
Доступные пакеты
net-snmp.i686                          1:5.7.1-5.fc17                     updates                   
net-snmp-agent-libs.i686               1:5.7.1-5.fc17                     updates                   
net-snmp-devel.i686                    1:5.7.1-5.fc17                     updates                   
net-snmp-gui.i686                      1:5.7.1-5.fc17                     updates                   
net-snmp-libs.i686                     1:5.7.1-5.fc17                     updates                   
net-snmp-perl.i686                     1:5.7.1-5.fc17                     updates                   
net-snmp-python.i686                   1:5.7.1-5.fc17                     updates                   
net-snmp-sysvinit.i686                 1:5.7.1-5.fc17                     updates                   
net-snmp-utils.i686                    1:5.7.1-5.fc17                     updates                   
А теперь я могу "от нуля" поустанавливать все нужные инструменты.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 05 дек 2012, 11:18

Olej писал(а):А теперь я могу "от нуля" поустанавливать все нужные инструменты.

Код: Выделить всё

bash-4.2$ sudo yum install net-snmp.i686 
...
Установлено:
  net-snmp.i686 1:5.7.1-5.fc17                                                                                                 
Установлены зависимости:
  lm_sensors-libs.i686 0:3.3.2-5.fc17                   net-snmp-agent-libs.i686 1:5.7.1-5.fc17                         
Обновлены зависимости:
  net-snmp-libs.i686 1:5.7.1-5.fc17                                                                                            
Выполнено!
New leaves:
  net-snmp.i686
Теперь установлена базовая функционалность SNMP: демоны (сервисы) реализующие агентов.

Код: Выделить всё

bash-4.2$ ls -w120 /lib/systemd/system/*snmp*.service
/lib/systemd/system/snmpd.service  /lib/systemd/system/snmptrapd.service
bash-4.2$ ls /etc/snmp
snmpd.conf  snmptrapd.conf
bash-4.2$ which snmpd
/usr/sbin/snmpd
bash-4.2$ which snmptrapd
/usr/sbin/snmptrapd
bash-4.2$ yum list installed net-snmp*
...
Установленные пакеты
net-snmp.i686                                                   1:5.7.1-5.fc17                                         @updates
net-snmp-agent-libs.i686                                        1:5.7.1-5.fc17                                         @updates
net-snmp-libs.i686                                              1:5.7.1-5.fc17                                         @updates
У нас появилось в /lib/systemd/system/ управление сервисом SNMP (агентом snmpd) - хоть сейчас запуская! (но я пока погожу).
Появились конфигурационные файлы в /etc (snmpd.conf и snmptrapd.conf) - основные с чем придётся работать.

Это 1-й этап.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Протокол SNMP в POSIX-операционных системах.

Непрочитанное сообщение Olej » 05 дек 2012, 11:25

Olej писал(а):Это 1-й этап.
Теперь у нас уже есть возможность запустить агенты SNMP и взаимодействовать с ними из сети (UDP порты 161 и 162).
Но у нас нет даже средств посмотреть как работает дефаултный SNMP (как есть, пока без наших доделок).
У нас нет утилит:

Код: Выделить всё

bash-4.2$ which snmpwalk
which: no snmpwalk in ...
...
Или так:

Код: Выделить всё

bash-4.2$ net-snmp-config --base-cflags
bash: net-snmp-config: команда не найдена
P.S. Это всё утилиты из разных пакетов, которые нам понадобятся.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей