Протокол SNMP в POSIX-операционных системах.
Модератор: Olej
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Протокол SNMP в POSIX-операционных системах.
Про 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).
Но нельзя не отметить законченность(задокументированы любые мелочи, коих немало) и расширяемость протокола 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 раз.
-
- Писатель
- Сообщения: 69
- Зарегистрирован: 02 авг 2012, 14:22
- Откуда: Москва
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Передо мной стоит задача сначала написать свой менеджер SNMP, позволяющий производить опрос подключённого к сети оборудования и устанавливать необходимые значения переменных его MIB. Мой хост -- Fedora17 x64, и для этих благих целей будем использовать Линукс-инструментарий SNMP -- библиотеку C++ Net-SNMP и дополнительные SNMP-utils. Среда разработки предполагается NetBeans, но надо ознакомиться и с Geany.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Да, на удивлением мало описаний практических задач.SimpleUser писал(а):Про Simple Network Managment Protocol(SNMP) слышали многие, но сведений по практическому применению его для повседневных задач -- проверка-настройка-тестирование аппаратуры, подключённой к сети TCP/IP -- практически нет.
Я после вашего сообщения поднял свои работы по SNMP и обнаружил там, кроме прочего, 2 недописанных текста описаний, из которых вполне можно сделать сносное руководство.
Да уж, с Simple в названии - это они погорячилисьSimpleUser писал(а): Это объясняется достаточно сложной(несмотря на название протокола) структурой составных частей системы(в подавляющем большинстве случаев распределённой), использующей данный протокол взаимодействия. Кроме того для его понимания неплохо бы изучить основы нотации ASN.
Но нельзя не отметить законченность(задокументированы любые мелочи, коих немало) и расширяемость протокола SNMP -- возможно добавлять записи с необходимой пользователю информацией в стандартную базу данных устройств MIB(или MIB II в новых версиях).
Я раньше (сейчас посмотрел - это начало 2009г.) работал над SNMP-подсистемой диагностики и контроля сложной комплексной системы >6 мес. (это в режиме полноразмерного рабочего дня 8 час., а иногда и 10). И заказчик/работодатель вполне были готовы платить не такую уже плохую зарплату ежемесячную на протяжении этих 6 мес. - это примерно может служить ориентиром трудоёмкости въезжания всерьёз в SNMP.
Но с SNMP не столько сложно всё, сколько громоздко и замусорено ... протокол старый, и за годы там накопилось много ... суеверий.
И начинать разбираться нужно бы с развеивания этих красивых народных легенд.
Но порт может быть и другой, нестандартный (кстати, обратите внимание), что дефаултный порт 161 - привилегированный (<1024) а это уже потребует прав root.SimpleUser писал(а): Хотя бы то, что в качестве транспортного используется протокол без установления соединения -- UDP. Это даёт системе гибкость "не мешать" прочему сетевому обмену, а также позволяет использовать один и тот же порт для приёма и передачи соообщений -- по умолчанию 161.
И это есть 1-е суеверие из области SNMP:SimpleUser писал(а): Все компоненты системы подразделяются на менеджеров SNMP, производящих опрос оборудования, и агентов, отвечающих на запросы и могущих сигнализировать о неисправностях посылкой специального сообщения trap.
- то, что у всех людей называется: сервер, сервис, служба - они называют агент;
- то, что у всех людей называется: клиент - они называют менеджер;
И этой путанной терминологией создают 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-операционных системах.
С небольшими уточнениями: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 писал(а): Я после вашего сообщения поднял свои работы по SNMP и обнаружил там, кроме прочего, 2 недописанных текста описаний, из которых вполне можно сделать сносное руководство.
- вернуться к этой работе...
- сформировать тестовую задачу (она у меня, собственно, давно есть)
- и провести всё конструирование от начала до конца.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Успех такого пробного проекта всегда является итогом того, удастся ли сформировать тестовую задачу как можно проще... "простую как мычание"(с) , "простую как умывальник"(с).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 КБ) 610 скачиваний
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Опережая события, но пока не забыл и не потерял - вот руководство от работников IBM по написанию кода субагентов: NetSNMP subagent development manual.Olej писал(а):г). доделав к snmpd субагент, работающего по специальному протоколу agentx.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Инструменты (программные пакеты) SNMP...
Мне здорово повезло, в том смысле, что на сегодня у меня под руках есть достаточно свежая инсталляция системы Linux, дистрибутив Fedora 17 RFR, в которой по умолчанию не установлена SNMP. Поэтому можно по шагам устанавливать только те инструменты SNMP, которые необходимо, и тем придать этому процессу системность.
Убеждаемся, что ничего нет, не установлено, не запущено:
2 последние команды нужны для 2-х разных систем инициализации сервисов Linux: старой sysinit и новой systemd.
А теперь я могу "от нуля" поустанавливать все нужные инструменты.
Мне здорово повезло, в том смысле, что на сегодня у меня под руках есть достаточно свежая инсталляция системы 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*: Нет такого файла или каталога
Код: Выделить всё
$ 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 писал(а):А теперь я могу "от нуля" поустанавливать все нужные инструменты.
Код: Выделить всё
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
Код: Выделить всё
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
Появились конфигурационные файлы в /etc (snmpd.conf и snmptrapd.conf) - основные с чем придётся работать.
Это 1-й этап.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Протокол SNMP в POSIX-операционных системах.
Теперь у нас уже есть возможность запустить агенты SNMP и взаимодействовать с ними из сети (UDP порты 161 и 162).Olej писал(а):Это 1-й этап.
Но у нас нет даже средств посмотреть как работает дефаултный SNMP (как есть, пока без наших доделок).
У нас нет утилит:
Код: Выделить всё
bash-4.2$ which snmpwalk
which: no snmpwalk in ...
...
Код: Выделить всё
bash-4.2$ net-snmp-config --base-cflags
bash: net-snmp-config: команда не найдена
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя