Php руководство по рнр 3 0 функции snmp

Содержание

snmp — PHP snmpset несколько O >

Я настраиваю устройство через SNMP, и некоторые параметры должны отправлять больше OID в одном пакете (последний OID имеет значение «createAndGo»).

PHP snmpset может отправить только 1 значение для 1 OID.

Как установить несколько идентификаторов OID + значений в одном заданном кадре?

Ниже приведен пример

Решение

Пожалуйста, обратитесь к PHP SNMP: установить вызов;

Другие решения

Вы можете использовать внешнюю программу, такую ​​как netsnmp, или работать с классом php snmp.

Php руководство по рнр 3 0 функции snmp

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

snmp_set_quick_print — Set the value of quick_print within the UCD SNMP library

Description void snmp_set_quick_print ( bool quick_print )

Sets the value of quick_print within the UCD SNMP library. When this is set (1), the SNMP library will return ‘quick printed’ values. This means that just the value will be printed. When quick_print is not enabled (default) the UCD SNMP library prints extra information including the type of the value (i.e. IpAddress or OID). Additionally, if quick_print is not enabled, the library prints additional hex values for all strings of three characters or less.

Setting quick_print is often used when using the information returned rather then displaying it.

The first value printed might be: ‘Timeticks: (0) 0:00:00.00’, whereas with quick_print enabled, just ‘0:00:00.00’ would be printed.

By default the UCD SNMP library returns verbose values, quick_print is used to return only the value.

Currently strings are still returned with extra quotes, this will be corrected in a later release.

snmp_set_quick_print() is only available when using the UCD SNMP library. This function is not available when using the Windows SNMP library.

Пред. Начало След.
snmp_set_oid_numeric_print Уровень выше snmp_set_valueretrieval

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Руководство по командам Net-SNMP

Mark Silinio
последнее обновление 21/04/05

Оригинал: silinio.webhost.ru

Что про что

Данный материал представляет собой перевод Net-SNMP Tutorial — Commands программы Net-SNMP использующейся для работы с протоколом SNMP во многих UNIX системах, включая Linux и *BSD.
В конце перевода приводятся некоторые советы и полезные ссылки.

Примечания по переводу:

Содержание:

snmptranslate: анализ OID’ов в MIB деревьях

Утилита snmptranslate позволяет с командной строки изучать MIB-деревья.
В самом простом случае, она принимает в качестве аргумента O >-On влияет только на вывод ( -O , от слова Output): Хотите узнать полное значение OID? Используйте опцию -Of: Проблема с вышеупомянутой командой в том, что вам необходимо помнить весь OID, который вы хотите использовать в аргументе.
Ничего страшного, используйте опцию -IR ( -I , от слова Input) для поиска по всему MIB-дереву: С помощью опции -Ib возможен поиск по MIB-дереву с использованием регулярных выражений: Чтобы получить весь список найденных по регулярному выражению значений, используйте опцию -TB : Получить дополнительную информацию о MIB-узлем можно с -Td (description) опцией: И наконец, если вы хотите получить аккуратную диаграмму секции MIB-дерева, используйте -Tp опцию: Запустив snmptranslate -Tp без каких-либо аргументов, можно получить всё MIB-дерево целиком.

snmpget: получение информации с удалённого хоста

Команда snmpget используется для чтения информации с устройства, заданного по его имени(host name), аутентификационной информации и OID. Пример: В приведённом примере test.net-snmp.org — это имя хоста с которого мы получаем данные, используя SNMP общество(community string) demopublic и запрашиваем значение OID’а system.sysUpTime.0.
Ранние версии утилит ucd-snmp использовали по умолчанию SNMPv1 и community name следовало за именем хоста. Текущие версии net-snmp используют по-умолчанию SNMPv3 и требуют как номер версии, так и community string в опциях коммандной строки. SNMPv2, по сути подобен SNMPv1, но с небольшими модификациями, и так же использует передачу community names в качестве паролей в виде открытого текста. Результат команды, использующей SNMPv2c, будет аналогичным: Все утилиты(кроме snmptranslate) позволяют использовать сокращения OID’ов и производят поиск по всему MIB дереву, так что вы можете указать только часть OID’а: Частой ошибкой является указание команде snmpget OID’а без индекса. В приведённом примере значение запрашиваемое по OID’у является скаляром, и индекс скаляра всегда равен ‘0’(нулю). Необходимо добавление ‘.0’ в конец OID’а, в противном случае произойдёт ошибка. Заметьте, что сообщения об ошибке несколько различны для SNMPv1 и SNMPv2c: Возможно получение значений нескольких OID’ов одной командой:

snmpgetnext: получение информации следующего OID’а

Команда snmpgetnext похожа на snmpget, с тем лишь различием, что возвращает OID и его значение, следующее в MIB-дереве за тем, что указано в качестве аргумента:

Так, snmpgetnext может использоваться для последовательного просмотра OID’ов просто путём указания в аргументе последнего полученного OID’а:
Фактически команда snmpwalk, рассматриваемая ниже, делает то же самое за один раз!
В отличие от snmpget, snmpgetnext возвращает значение для OID’а, написанного без индекса(см. про snmpget выше). В таком случае с snmpgetnext не будет возникать ошибки, т.к. вы получаете значение следующей переменной независимо от того, указан ли индекс для переменной в аргументе команды:

snmpwalk: серия snmpnext комманд за раз

Команда snmpwalk автоматически выполняет серию snmpnext команд внутри заданного OID’ом диапазона. К примеру, если вы хотите получить всю информацию, хранящуюся в MIB группе system, используйте следующую команду:

snmptable: отображение SNMP-таблицы

Команда snmptable отображает SNMP таблицу в разбитом на колонки виде. Рассмотрим данные sysORTable. В отличие от команды snmpwalk, отображающей данные в виде длинного списка, snmptable форматирует вывод в удобном для чтения виде (иногда, как в примере ниже, вывод может быть весьма широк):

Но вы можете менять ширину выводимой таблицы:

snmpset: изменение OID’ов

Команда snmpset используется для изменения данных на удалённом хосте/устройстве. Для каждой переменной, что вам необходимо изменить, необходимо указать OID, тип данных и само значение.
Вы можете увидеть поддерживаемые типы данных в конце вывода команды snmpset, запущенной с ключом -h :
Для примера проверим, а затем изменим значение OID’а, используя snmpget и snmpset:

Как вы могли видеть, мы успешно изменили значение OID’а ucdDemoPublicString.0.
Заметьте, что в случае, когда вы не имеете права на изменение(запись) объекта, сообщения об ошибке различны для SNMPv1 и SNMPv2c:

В SNMPv1 отсутствуют описания ошибок, но это исправлено в SNMPv2c. Весьма рекомендуется использовать SNMPv2c вместо SNMPv1, но ещё более лучшим вариантом будет SNMPv3 как в плане безопасности, так и в плане сообщений об ошибках,- SNMPv3 будет рассмотрен чуть позже.

snmptrap: посылка и принятие TRAP’ов, реагирование на них

TRAP’ы(ловушки) могут использоваться для уведомления станции управления о каких-либо неполадках.
Далее мы рассмотрим определение TRAP’ов в MIB-файлах, создание их с помощью утилиты snmptrap , и приём утилитой snmptrapd .
Примечание: как уже было отмечено, запись O >snmptrapd подразумевает использование опции -OS.
Определение TRAP’ов.
TRAP’ы SNMPv1 и SNMPv2(INFORM’ы) используют два совершенно разных вида определений.
TRAP’ы SNMPv1 определяются в MIB файле используя макроопределение TRAP-TYPE, как в следующем примере: Так мы определили одну enterprice-специфичную TRAP, которая может быть вызвана следующим образом:

При её получении snmptrapd выведет такой текст на экран: Формат INFORM’ов SNMPv2 отличен от формата TRAP’ов SNMPv1 и выглядит подобным образом: Это определение аналогично TRAP’у SNMPv1 что рассматривали выше. Так выглядит вызов INFORM’а SNMPv2:

А так — вывод snmptrapd при получении INFORM’а: Определение действий при приёме TRAP’ов и INFORM’ов.
Утилита snmptrapd имеет возможность выполнять другие программы в случае получения ловушки-уведомления. Этим управляет директива traphandle, имеющая следующий синтаксис: Заметьте, что в качестве информации о том, какая TRAP(или INFORM) будет получена, используется OID. Это подразумевает под собой необходимость представления ловушек SNMPv1 в формате SNMPv2, что описано в RFC 2089. Обычно OID для описанной выше TRAP создаётся путём взятия ENTERPRICE параметра и добавления к нему под-идентификаторов 0 и 17. Значения OID’а для SNMPv1 TRAP’ов определяются аналогично SNMPv2.
Команда определят название программы, запускаемой при получении TRAP демоном snmptrapd . Программа получает данные TRAP на стандартный ввод. Первая строка — это имя хоста, вторая — IP-адрес отправителя TRAP, и последующие линии содержат пары значений OID ЗНАЧЕНИЕ с данными из полученной TRAP.
Пример shell-скрипта, вызываемого snmptrapd : Далее используем следующий snmptrapd.conf файл: И имитируем отключение сетевого интерфейса с помощью snmptrap :

получаем такой вывод от snmptrapd : и такой вывод нашей handler-программы:

вызов нашей enterprice specific TRAP’ы даёт такой вывод handler-программы:

и напоследок — наш enterprice specific INFORM:

Генерация TRAP’ов агентом
Агент также способен посылать TRAP’ы. При запуске генерируется TRAP SNMPv2-MIB::coldStart, а при выключении UCD-SNMP-MIB::ucdShutDown
Эти TRAP’ы отправляются хостам, определённым в snmpd.conf файле с помощью директив trapsink и trap2sink (для SNMPv1 и SNMPv2 соответственно) Дополнительно агент может отсылать TRAP’ы в случае неудавшейся аутентификации хостам, указанным директивой authtrapenable файла snmpd.conf , или путём активации переменной SNMPv2-MIB::snmpEnableAuthenTraps:

Отправка и приём TRAP’ов и INFORM’ов для SNMPv3

Основные отличия между TRAP’ами и INFORM’ами: TRAP — это SNMP сообщение, отправленное одним приложением другому приложению(обычно это удалённый хост). Их основная задача состоит в уведомлении о случившемся. Недостатком TRAP’ов является отстутствие возможности получения подтверждения о том, что TRAP был принят удалённым хостом. SNMPv2 PDU исправляют эту ситуацию, введя понятие INFORM, которое представляет собой тот же самый TRAP, но с подтверждением. Таким образом, если приложение на удалённом хосте получает INFORM, то оно отправляет в ответ подтверждение о получении. Следовательно можно быть наверняка уверенным в том, что необходимое уведомление доставлено. С помощью команды snmptrap возможна отправка как TRAP’ов, так и INFROM’ов, в последнем случае нужно добавить опцию -Ci (либо использовать команду snmpinform ). Обратите внимание, что для отпраки INFORM’ов нужно использовать SNMPv2c или SNMPv3. Программа snmptrapd способна принимать как INFORM’ы, так и TRAP’ы.
Примечание: Для того, чтобы программа snmptrapd успешно принимала TRAP’ы и INFORM’ы SNMPv3, отправленные определённым пользователем, тот должен быть правильно настроен, используя директивы createUser , рассматриваемые ниже. Если запустить snmptrapd с опцией -Dusm , то в таких случаях будет выведено сообщение «no such user». SNMPv3, пользователи и engineID’ы

TRAP’ы и INFORM’ы более гибки при использовании SNMPv3 благодаря отличной реализации базы пользователей. Сообщения SNMPv1 и SNMPv2c, использующие community-строки, выдают информацию любому пользователю. SNMPv3 отклоняет запрос, если пользователь отстутствует в базе пользователей SNMPv3. Всё просто, не так ли? За исключением одной небольшой проблемы: база пользователей приложения SNMPv3 описывает пользователей парой значений в виде имени пользователя(называемого «securityName») и идентификатора данного SNMP приложения, с которым осущевствляется связь(зовётся «engineID»). Обычно когда вы используете приложения Net-SNMP(snmpget, snmpwalk и пр.), они сами находят engineID и используют имя пользователя, engineID и пароль в базе пользователей на основе engineID удалённого приложения. Потом будет проще
SNMPv3 INFORM’ы

INFORM’ы работают по схожему принципу. Для отсылки INFORM’a используйте удалённый engine >snmptrap (и не только) отыскивает удалённый engine >snmptrapd (подразумевается, что вы настраиваете получение TRAP’ов и INFORM’ов) необходимые учётные записи:

  1. Остановите запущённую snmptrapd
  2. Добавьте в /var/net-snmp/snmptrapd.conf следующую строку:
  3. Где myuser это securityName, mypassword — это пароль для аутентификации, а myotherpassword — это пароль для шифрования(оставьте его пустым, если не хотите менять или не хотите использовать шифрование)
  4. Перезапустите программу snmptrapd

Теперь вы можете использовать snmpinform для отсылки snmptrapd INFORM’а coldStart:

Если вы сделали всё правильно, то должны увидеть подобное от snmptrapd : TRAP’ы SNMPv3
Использование TRAP’ов SNMPv3 порою может несколько запутать, но даёт хорошее понимание работы протокола, если вы немного поразмыслите об этом. Отличие TRAP’ов SNMPv3 в использовании engine >/var/net-snmp/snmptrapd.conf .
Итак, проверьте следующее:

  1. Остановите snmptrapd
  2. вставьте в файл /var/net-snmp/snmptrapd.conf следующую строку:
  3. Заметьте, что значение engine >snmptrapd .

Теперь вы имеете возможность отправить с помощью snmptrap coldStart v3 TRAP сообщение TRAP-демону:

Вывод будет аналогичен предыдущему примеру.
Далее должно идти долгое объяснение про v3 engineID, INFORM’ы, TRAP’ы, обнаружение engineID, секретные ключи, пароли, локальные ключи и пр. Всё это безобразие занимает 18223 строк текста в RFC 2570-2575, потому не будем повторяться здесь.

Использование локальных MIB-файлов

Утилиты Net-SNMP могут производить преобразование цифровых OID’ов в текстовые используя файлы-описания MIB’ов. В комплекте уже идёт набор из нескольких стандартных MIB’ов, но во многих случаях этого недостраточно.
Утилиты Net-SNMP загружают MIB’ы по-умолчанию из следующих двух директорий:

  1. $HOME/.snmp/mibs
  2. /usr/local/share/snmp/mibs

К примеру, у вас есть MIB, которую вы хотите использовать и которая называется CISCO-RHINO-MIB (такая действительно есть). Поместите эту MIB в одну из вышеперечисленных директорий. Если вы взяли MIB из какого-либо файла(как RFC например), убедитесь, что убрали оттуда все данные, не относящиеся к MIB(заглавный текст, разделители страниц). Первая строка файла должна начинаться с текста типа «CISCO-RHINO-MIB DEFINITIONS ::= BEGIN»
Попробуем преобразовать в цифровой вид имя узла из CISCO-RHINO-MIB, пусть это будет cicsoLS1010ChassisFanLed.
Убедимся, что snmptranslate ничего не выдаст нам о таком узле:

Ага, она не знает. Теперь мы должны скачать файл CISCO-RHINO-MIB.mib и поместить его в директорию, где он будет найден утилитами Net-SNMP. Скопируем его в $HOME/.snmp/mibs .
Воспользуемся флагом -m команды snmptranslate для загрузки MIB’а. Использование опции » -m +CISCO-RHINO-MIB указывает на загрузку не только MIB’ов, использующихся по-умолчанию, но также и на загрузку CISCO-RHINO-MIB(знак ‘+’ означает «добавить»).

Опа. Из первой строки можно увидеть, что нам также необходим CISCO-SMI MIB. Скачиваем его и копируем в $HOME/.snmp/mibs . Выполняем команду повторно:

Работает!
Ещё один момент: вы можете набрать эту команду другим способом(такой набор наиболее предпочтителен и рекомендуется ведущими разработчиками Net-SNMP):

Вас наверняка интересует, как сделать, чтобы нужные MIB’ы автоматически подгружались утилитами Net-SNMP без их явного указания в командной строке. Есть несколько путей сделать это.
Примечание пользователям программы Ethereal: Один из этих методов годится и для Ethereal, т.к. тот не имеет возможности подгружать нужные MIB’ы используя опции -m и -M , что мы рассматривали выше.
В первую очередь вы можете поместить следующие строки в файл snmp.conf . Этот файл может быть помещён как в системный конфигурационный файл Net-SNMP(напр. /usr/local/share/snmp.conf ), так и в персональный( $HOME/.snmp/snmp.conf ): Для указания нужных MIB’ов можно также использовать переменную окружения с названием MIBS(далее пример для оболочки /bin/sh ):

Опции специфичные для SNMPv3

3-я версия протокола SNMP имеет значительные улучшения по части безопасности в сравнении с предыдущими версиями. Так, SNMPv1 и SNMPv2c используют для аутентификации community-строку отсылаемую открытым текстом. Такой вид аутентификации весьма небезопасен, т.к. может быть легко перехвачен сниффером.
SNMPv3 значительно улучшена по части безопасности и разделяет аутентификацию и авторизицию на следующие две части:

  • USM — User-based Security Module, содежит список пользователей и их атрибутов. USM описан в RFC 2574.
  • VACM — Version-based Access Control Module, контроллирует доступ пользователей(так и SNMPv1/v2c communities), в т.ч. доступ к определённым секциям MIB-дерева. VACM описан в RFC 2575.

Рассмотрим пример использования Net-SNMP для изменения(set) данных на удалённом хосте.
Профиль пользователя содержит следующие данные:

Рассмотрим детальнее вывод последней команды.
— Каждый пользователь имеет имя(securityName), тип аутентификации(authProtocol), тип privacy(privProtocol), а также ключи аутентификации(authKey) и privacy(privKey).
— Аутентификация происходит путём подписывания отправляемого сообщения с помощью authKey. authProtocol на сегодняшний день может быть MD5 или SHA, тогда как authKeys и privKeys генерируются из парольной фразы длиной не менее 8-ми символов
— Аутентификация происходит с применением пользовательского privKey для шифрования данных отсылаемого сообщения. privProtocol может быть AES или DES.
Сообщения могут быть отосланы неаутентифицированными, аутентифицированными, или аутентифицированными и зашифрованными в зависимости от значания securityLevel.
Таблица ниже описывает, как все эти значения могут быть указаны в командной строке. Вы также можете прописать значения по умолчанию в файл

/.snmp/snmp.conf , используя третью колонку таблицы.

Параметр Опция коммандной строки Обозначение в snmp.conf
securityName -u NAME defSecurityName NAME
authProtocol -a (MD5|SHA) defAuthType (MD5|SHA)
privProtocol -x (AES|DES) defPrivType DES
authKey -A PASSPHRASE defAuthPassphrase PASSPHRASE
privKey -X PASSPHRASE defPrivPassphrase PASSPHRASE
securityLevel -l (noAuthNoPriv|authNoPriv|authPriv) defSecurityLevel (noAuthNoPriv|authNoPriv|authPriv)
context -n CONTEXTNAME defContext CONTEXTNAME

Примеры
Пример запроса без аутентификации (как минимум, требуется указать имя пользователя):

Запрос с аутентификацией:

И наконец, запрос с аутентификацией и шифрованием:

Конечно же они все выглядят похоже т.к. работают подобным образом. Но хост в примерах выше позволял использовать любой уровень аутентификации. Хосты, что вы будете настраивать, должны иметь более жёсткие правила безопасности и иметь хотя бы authNoPriv уровень при настройке VACM контроля доступа. И в завершении, пропишем snmp.conf подобным образом: Таким образом все аргументы, используемые нами ранее в командной строке, будут автоматически браться из этого файла:

Опции влияющие на формат вывода

Все команды пакета Net-SNMP, за исключением snmptrapd и snmpd , могут использовать опции которые мы рассмотрим ниже.
Для получения списка всех опций запустите программу с опцией » -h «. С помощью флага -O , передаваемого в качестве опции командам Net-SNMP, можно изменять формат вывода:

Несколько примеров использования этой возможности:

-On
Данный флаг позволяет выводить OID’ы в числовом формате вместо текстового:

-Oe
Этот флаг определяет, нужно ли показывать обяснение(перед числом в скобках) полученного числового значения:

-Ob
Многие SNMP таблицы используют в качестве индекса строки. Затем строки транслируются в OID сегменты для выполнения SNMP запроса. Давайте попробуем разобраться в этом на следующем примере. Рассморим OID usmUserEntry:

Как видите, usmUserEntry использует в качестве индексов два строковых значения: usmUserEngineID и usmUserName. По умолчанию команды Net-SNMP используют вывод, наиболее понятный для человека: Видим два OID’а: значение одного — «. «, другого — «MD5User». Первое строковое значение представляет собой engineID, которое состоит из непечатных символов(отсюда и многоточие), второе же — представляет собой как раз строку, которую мы безо всяких проблем можем прочесть. Немного подумав, пробуем просмотреть индексы в числовом виде: Как видите, OID’ы — это не просто строковое значение, порою всё несколько сложнее.
При использовании строковых значений в командах Net-SNMP перед кавычками ставятся обратные слэши, как того требует большинство оболочек:
-OX
Использование этой опции является куда более лучшим методом отображения значений индексов. Обратите внимание, что такой формат используется только при выводе.
Значения, возвращаемые MIB’ами IPv6, бывает довольно сложно прочесть, формат весьма запутан по сравнению с теми значениями, что вы могли видеть.
Рассмотрим IPV6-MIB:ipv6RouteTable: видим: в качестве индекса используется IPv6 адрес и два чиловых(integer) значения. Посмотрим на это: да, не так уж легко разобраться. Тогда попробуем так: Выглядит приятнее. Такой формат выделяет квадратными скобками каждый индекс, и использует информацию DISPLAY-HINT и преобразование строк для их правильного отображения.

-Os , -OS , и -Of
Сократить вывод слишком длинных O >-Os и -OS ( -OS добавляет название MIB’а перед OID’ом): Намного короче, как видите отображается только последний узел OID’а.
Опция же -Of , напротив, выводит полный OID:
-Ov
Флаг -Ov выводит только значение, но не название переменной:
-Oq
Флаг -Oq обеспечивает наиболее быстрый(q — quick) вывод, что может быть полезно в случае использования команд Net-SNMP в различных скриптах: Заметьте, что в таком формате отсутствует знак равенства и символы «OID:» спереди.
Разумеется, вы можете комбинировать разные опции: Для shell-скриптов будет полезна опция -Oqv . Команда вернёт только значение атрибута, что весьма удобно использовать в скриптах:

Сайт ARNY.RU

Настройка SNMP — достаточно интересная тема, так как протокол SNMP является мощным инструментом в руках системного администратора и критически необходимым в большой сети. Сетевым устройством будет выступать маршрутизатор CISCO.

Как читать эту статью?

Чтобы была польза, было понятно и хоть что-то отложилось в голове. Нужно прочесть теорию, скачать все программы, сделать все настройки, которые использую здесь я. Далее читать и выполнять по шагам то, что выполняю я, сравнивать результат. Желательно написать комментарий, в нём рассказать что получилось. Иначе данная статья окажется бесполезным набором букв.

Немного теории

Общие понятия

Своими словами, чтобы было понятнее — SNMP состоит из 3 частей:

  1. Агента, настроенного на сетевом устройстве;
  2. Программы-диспетчера, настроенной на компьютере;
  3. Кроме этого на устройстве есть База Управляющей Информации (MIB), где собственно и хранятся нужные данные.

База заполняется автоматически сетевым устройством. Нужно только выбирать оттуда необходимые данные.

Взаимодействие между диспетчером и агентом происходит 2 разными способами:

  1. При наступлении определённых заранее событий на устройстве, агент самостоятельно отсылает данные о событии диспетчеру — ловушка SNMP;
  2. Диспетчер собирает статистику по заранее заданным параметрам, опрашивая с определённым интервалом агента — запрос SNMP GetRequest.

Это если на устройстве для диспетчера выдано право только на чтение (RO) базы MIB, если же выдано право на запись (RW), то есть дополнительная возможность:

  • Диспетчер изменяет заранее заданные параметры в MIB, посылая запрос агенту — запрос SNMP SetRequest;

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

Понятие строки сообщества — это пароль, который однозначно идентифицирует агента для версии 1/2, то есть тут нет связки логин/пароль — есть строка сообщества, которая сразу и логин, и пароль.

Версии SNMP

Существует 3 версии SNMP:

  • Версия 1 — основной стандарт;
  • Версия 2c — доработанная в плане производительности версия 1, не включает в себя безопасность версии 2 и неофициально известна как SNMPv1.5. Доработка заключается в том, что параметры из MIB можно выбирать не по 1, а группой (параметры выбираются последовательно, перебором);
  • Версия 3 — доработана только безопасность по отношению к 2c, а именно шифрование и аутентификация.

В плане реализации работы между версиями разница небольшая, но поскольку только версия 3 безопасна, то именно она является актуальной, а версии 1 и 2c хотя всё ещё боевые, но считаются устаревшими. Хотя на практике из-за простоты повсеместно используется SNMP v2c.

База MIB

Структура базы непривычна для понимания, здесь просто нужно запомнить и со временем ничего непривычного не будет. Это структура перевёрнутого дерева, где ствол — 1 (иногда пишут .1), а ветви обозначаются цифрами начиная тоже с 1 и далее. Уровней вложенности может быть много, в ветке новые ветки и так далее. Большинство веток заканчиваются параметрами. Параметры внутри ветки также нумеруются с 1. Путь к параметру состоит из цифр начиная с со ствола и проходит через ведущие к параметру ветки. Цифры разделяются точками. Такой путь называется OID (Object ID). Важно отметить, что это стандарт — нумерация чётко прописана в данном стандарте и одинакова для всех производителей оборудования, но конкретный производитель может добавлять свои уникальные ветви, которые присутствуют только в его оборудовании.

Диспетчер SNMP (программа) имеет стандартную базу MIB, чтобы программа узнала о специфичных ветках и параметрах конкретного производителя, нужно подгрузить MIB этого производителя.

Почитать о MIB CISCO. OIDs полезных параметров придётся искать в интернете/документации.

Пример. Путь к стандартной ветке system, где хранятся такие, например, параметры как описание системы (sysDescr) и время прошедшее с запуска системы (sysUpTime) — 1.3.6.1.2.1.1. Путь к параметру sysDescr — 1.3.6.1.2.1.1.1, добавилась ещё 1, так как это первый параметр ветки. Путь к sysUpTime — 1.3.6.1.2.1.1.3 — третий параметр.

Проприетарные ветки производителей всегда располагаются по строго заданному пути iso.org.dod.internet.private.enterprises или в цифровом выражении 1.3.6.1.4.1.

Пример. Для CISCO путь будет 1.3.6.1.4.1.9, а для D-Link 1.3.6.1.4.1.171

Для загрузки MIB CISCO нужно использовать
CISCO IOS MIB Locator или прямая ссылка: ftp://ftp.cisco.com/pub/mibs/

Подробнее о SNMP можно прочитать в 4 части курса CCNA.

Тестовая среда

Настраиваться будет маршрутизатор CISCO c3725, запущенный из под GNS3 и данные будут поступать в виртуальную машину (VM) Hyper-V. Агент SNMP уже является частью внутренней прошивки (IOS) маршрутизатора, а вот в качестве диспетчера будет использоваться бесплатное ПО — PowerSNMP Free Manager. CISCO рекомендует Free SNMP MIB Browser, не пробовал, не знаю. Соединяются маршрутизатор и VM посредством Облака GNS3. Для этого указываем в свойствах Облака внутренний виртуальный коммутатор, к которому подсоединена сетевая карта VM:

  • IP F0/0 маршрутизатора — 192.168.137.2/24
  • IP компьютера — 192.168.137.40/24
  • IP vEthernet (HUB1) — 192.168.137.1/24

На этом этапе считается, что все предварительные настройки уже выполнены.

SNMPv1/SNMPv2c

Версии настраиваются одинаково, так как версия не указывается при создании SNMP агента (строки сообщества), а лишь при создании ловушек. При создании строки сообщества задаётся лишь или право на чтение (RO), или право на запись (RW).

Пример. В маршрутизаторе настроен пока только интерфейс F0/0, ведущий к облаку (и VM). Введём команду создания агента (строки сообщества):

Создалось 2 группы на чтение — TEST v1 и TEST v2c. Удалим сообщество и группы:

Теперь создадим сообщество с правом на запись:

Снова введём команду:

Опять создалось 2 группы — v1 и 2c, только уже с правом и на чтение, и на запись:

На диспетчере SNMP для работы можно будет выбрать или 1, или 2 версию агента.

Настройка маршрутизатора

Полная настройка версий 1 и 2:

  • Команда 1 — создание списка доступа (SNMP_ACL).
  • Команда 2 — разрешает взаимодействие было только с указанным компьютером (192.168.137.40).
  • Команда 3 — возврат из режима конфигурирования списка доступа (config-std-nacl)# в режим глобальной конфигурации (config)#.
  • Команда 4 — создаём Агент SNMP (строку сообщества TEST) только для чтения (ro) — диспетчер сможет считывать значения параметров, но не сможет записывать новые значения и наконец, привязываем список доступа.
  • Команда 5 — указываем куда отсылать данные при срабатывании ловушки (192.168.137.40) и версия 1, для версии 2 будет — 2c вместо 1, имя сообщества (TEST).
  • Команда 6 — включаем ловушки и определяем какие именно ловушки нас интересуют (snmp).

В параметр snmp входят следующие ловушки:

Просмотреть полный перечень возможных ловушек можно командой:

Их там огромное количество:

Настройка VM

Нажатие кнопки Find покажет отсутствие доступных агентов в сети и срабатывание ловушки authentication:

Происходит так потому, что по умолчанию в программе стоит сообщество public, наш агент был опрошен, но отказал в доступе. Меняем public на TEST, агент опять не добавляется — широковещательный запрос. В свойствах ставим IP 192.168.137.2 и сообщество TEST, после чего агент успешно добавляется.

Ещё раз, строка сообщества (community) — это просто пароль, только называется по-другому.

Теперь погасим интерфейс F0/0 и снова включим:

С небольшой задержкой, ведь связанный интерфейс выключался, прилетают сообщения ловушек, смотрим:

OID отвечающий за состояние F0/0: 1.3.6.1.4.1.9.2.2.1.1.20.1 — первый полезный параметр. Следует обратить на то, что параметр находится в проприетарной ветке оборудования CISCO.

Теперь пробуем добавить этот параметр для мониторинга:

Параметр успешно добавился. Выставляем интервал опроса параметра и триггер: если значение параметра не равно up, то отправить сообщение на e-mail:

Задаём параметры e-mail и гасим F0/0. По истечению таймера состояние параметра изменилось на Timeout error, письмо не пришло — программа не оправляет сообщения по таймауту. Выставил опрос на минимум — 1 секунда, включил/выключил F0/0 ещё раз и вот долгожданное письмо:

SNMPv3

Подробно настройка описана в курсе CCNA R&S 6.0 BRIDGING COURSE. Тут будет посложнее, но и поинтереснее — мозги гарантированно заскрипят ��

Настройка маршрутизатора

Удаляем всё что относится к предыдущей настройке кроме списка доступа. Далее, разбил настройку на 2 части, потом будет понятно почему.

Общие шаги
  • Шаг 1. Настройте ACL-список (уже сделано);
  • Шаг 2. Настройте представление SNMP;
  • Шаг 3. Настройте группу SNMP;
  • Шаг 4. Настройте пользователя как члена группы SNMP.
Часть 1

Агент SNMPv3 настраивается по-другому нежели SNMPv1/SNMPv2:

Вместо строки сообщества создаётся пользователь с паролем (cisco123) и шифрованием (aes 128, ключ шифрования snmp321) — следует запомнить, что первым указывается пароль пользователя (auth sha cisco123) и вторым ключ шифрования (aes 128 snmp321). Это важно.

Предварительно для пользователя создаётся группа, а ещё ранее вид. Вид определяет с какой частью дерева MIB предстоит работать.

Ещё раз по командам:

  • Команда 1 — создание вида (SNMP-RO) для работы с веткой MIB (system).
  • Команда 2 — создание вида (SNMP-RO) для работы с веткой MIB (mib-2), mib-2 входит в system — эта команда только для примера, что можно добавлять несколько веток.
  • Команда 3 — создание группы (TEST) версии 3 (v3) с аутентификацией и шифрованием (priv) только для чтения (read) для вида (SNMP-RO) и списком доступа (SNMP_ACL).
  • Команда 4 — создание пользователя (ADMIN) в группе (TEST) версии 3 (v3) аутентификацией по алгоритму (sha), паролем (cisco123) и шифрованием (priv) по алгоритму (aes 128) и ключом шифрования (snmp321).
  • Команда 5 — включаем ловушки и определение типов ловушек (snmp).

Тут надо вспомнить 3 уровня безопасности SNMPv3:

  • auth — group using the authNoPriv Security Level (MD5/SHA-1 аутентификация, без шифрования данных);
  • noauth — group using the noAuthNoPriv Security Level (без аутентификации и шифрования);
  • priv — group using SNMPv3 authPriv security level (MD5/SHA-1 аутентификация, шифрование данных DES/3DES/AES)

Для использования authPriv требуется прошивка с поддержкой криптографии (k9).

Теперь проверим что получилось:

По соображениям безопасности пользователи SNMP не показываются в конфигурации.

Часть 2

Подробная настройка получателя ловушек SNMPv3:

  • Команда 6 — указываем хост куда отсылать данные при срабатывании ловушки (192.168.137.40) версии 3, без шифрования и аутентификации (noauth) для пользователя (ADMIN).

Проверяем, пользователь как был так и остался, а вот в группах SNMP и в конфигурации интересные изменения:

Появилась новая группа TEST, хотя команды на её создание не было.

И вот такая занятная строка в конфиге:

Понять что это такое можно выполнив команду:

Помимо группы для ловушек были автоматически созданы дополнительные виды: //blog.ine.com/2008/07/19/snmpv3-tutorial/

Здесь чётко видно, что работа агента с запросами и работа агента с ловушками — 2 абсолютно разных процесса.

Настройка VM

Для начала погасим и включим интерфейс S0/0 (один из дополнительных интерфейсов, интерфейсы по умолчанию на маршрутизаторе выключены), прилетают сообщения ловушек, диспетчер определяет ловушки как версию 2+:

Как видно из рисунка у пользователя ADMIN для ловушек нет шифрования и пароля.

Дальше добавляем агента с указанием версии и атрибутов:

И пробуем добавить параметр 1.3.6.1.4.1.9.2.2.1.1.20.2 — состояние интерфейса S0/0 для мониторинга.

И то же самое для F0/0 — 1.3.6.1.4.1.9.2.2.1.1.20.1. В чем дело? А дело в том, что параметр находится в ветке private, а эту ветку мы не добавляли в вид для работы, добавим:

Состояние интерфейса отображается корректно. С агентом версии 3 всё.

Настройка ловушек v3 с паролем и шифрованием

Удаляем получателя ловушек :

Проверяем пользователя, группы, виды, конфигурацию, если что-то удалилось — восстанавливаем (на самом деле удалиться ничего не должно, но когда настраивал, то первые раза 3 каждый раз получалось по-разному). Теперь:

И заново всё проверяем. Автоматически создались виды, пользователь на месте с теми же параметрами, нет новой группы TEST, так как параметры аутентификации и шифрования совпадают с созданной ранее, исходной группой TEST. В конфигурации параметр для автоматически созданных видов дописался к строке группы:

Если теперь погасить/поднять интерфейс, то ловушки не приходят диспетчеру.

Пробуем добавить пользователя для ловушек версии 3, в программе есть такая возможность. Для этого нужно ввести помимо прочего Engine ID. Его можно найти просмотрев пользователя SNMP либо выполнив команду:

Программа ожидает ввода Engine ID в виде 80-00-00-09-03-00-C2-01-25-D0-00-00, автоматического преобразования нет. Вносим реквизиты пользователя, снова гасим/поднимаем интерфейс S0/0, ловушки приходят:

Открываем сообщение ловушки и видим, что пароль и шифрование задействованы:

Установка Net-SNMP

А как же быть со средой Linux? Для Centos:

Далее, если выполнить:

Конфигурацию демона SNMP после установки нужно отредактировать. Если посмотреть файл /etc/ snmp / snmpd . conf, то в нём по умолчанию доступны ветви:

Соответственно запросы не подпадающие под эти ветви будут возвращаться с ошибкой как выше. Комментируем и оставляем:

Затем рестартуем сервис:

Самые основные и нужные команды пакета:

  • snmpget — SNMP GET запрос;
  • snmpwalk — получает часть дерева значений с помощью SNMP GetNext запросов;
  • snmpset — SNMP SET запрос.

На этом рассмотрение базовой работы SNMP завершено.

Если тема заинтересовала, то предлагаю выполнить лабу по SNMP.

Создание ловушек SNMP с помощью PHP

Я отчаянно ищу способ создания SNMP-ловушек из PHP. Я знаю, что встроенные методы используют snmpget, но я не мог понять, как отправлять SNMP-ловушки.

Кто-нибудь знает фрагмент кода/кода для него? Поиск в Интернете не вызвал ничего, кроме использования exec для вызова cli-инструментов, для которого определенно нет выбора для меня.

Я подозреваю, что было бы необходимо использовать socket_create и соответствующие функции для создания пакета UDP вручную.

Насколько я знаю, нет собственного способа генерации ловушек/сообщений с php. Даже расширение SNMP допускает только получение и установку запросов. Таким образом, единственный (быстрый) способ выполнить это — вызвать внешний инструмент, например net-snmp. Правильная командная строка будет похожа на

отправит общий менеджер linkUp менеджеру, для интерфейса 1 (взято из manpage). Для выполнения этого из php бинарные файлы net-snmp должны находиться на пути к системе, и вы можете либо вызвать exec, shell_exec или proc_open.

Obvisouly, вы также можете отправить ловушку самостоятельно, закодировав ее как исходный массив байтов и отправив ее через сокет UDP, но тогда вам нужно было реализовать кодировщик BER и кодер SNMP-пакетов самостоятельно, что я не рекомендую, Для справки вам понадобятся следующие сведения:

snmp — PHP snmpset несколько O >

Я настраиваю устройство через SNMP, и некоторые параметры должны отправлять больше OID в одном пакете (последний OID имеет значение «createAndGo»).

PHP snmpset может отправить только 1 значение для 1 OID.

Как установить несколько идентификаторов OID + значений в одном заданном кадре?

Ниже приведен пример

Решение

Пожалуйста, обратитесь к PHP SNMP: установить вызов;

Другие решения

Вы можете использовать внешнюю программу, такую ​​как netsnmp, или работать с классом php snmp.

XCV. Функции SNMP

Чтобы использовать функции SNMP в Unix, вам нужно установить пакет UCD SNMP. Под Windows эти функции доступны только в NT, но не в Win95/98.

Важно: для использования пакета UCD SNMP вам нужно будет также определить NO_ZEROLENGTH_COMMUNITY со значением 1, прежде чем компилировать его. После конфигурирования UCD SNMP, отредактируйте config.h и найдите NO_ZEROLENGTH_COMMUNITY. Раскомментируйте строку #define. Она после этого должна выглядеть так:

Если вы увидите странные ошибки сегментации в сочетании с командами SNMP, вы не выполнили вышеуказанных инструкций. Если вы не хотите перекомпилировать UCD SNMP, вы можете скомпилировать PHP с ключом —enable-ucd-snmp-hack, который будет работать помимо неправильной конфигурации.

Php руководство по рнр 3 0 функции snmp

Получение SNMP трапов является полной противоположностью запросам к SNMP устройствам.

В этом случае информация отправляется с SNMP устройства и собирается или “ловится” Zabbix’ом.

Обычно трапы отправляются при наступлении некоторых условий и агент подключается на 162 порт сервера (в отличии от 161 порта на стороне агента, который используется для запросов). Использование трапов может помочь обнаружить некоторые кратковременные проблемы, которые происходят между интервалами опроса и могут быть пропущены при запросах данных.

Получение SNMP трапов в Zabbix рассчитано на работу с snmptrapd и с одним из встроенных механизмов передачи трапов в Zabbix — либо perl скрипт, либо SNMPTT.

Последовательность действий при получении трапа:

3.1 Настройка SNMP трапов

Настройка следующих полей в веб-интерфейсе является специфичной для этого типа элементов данных:

В поле Ключ используйте один из ключей SNMP трапов:

Ключ
Описание Возвращаемое значение Комментарии
snmptrap[регулярное выражение]
Отлов всех SNMP трапов , который совпадают с регулярным выражением, указанном в поле регулярное выражение. Если регулярное выражение не указано, принимаются все трапы. SNMP трап Этот элемент данных можно привязать только к SNMP интерфейсам.
Элемент данных поддерживается начиная с Zabbix 2.0.0.
Обратите внимание: Начиная с Zabbix 2.0.5, в параметре этого ключа элемента данных поддерживаются пользовательские макросы и глобальные регулярные выражения.
snmptrap.fallback
Отлов всех SNMP трапы, которые не совпадают ни с одним из элементов данных snmptrap[] для этого интерфейса. SNMP трап Этот элемент данных можно привязать только к SNMP интерфейсам.
Элемент данных поддерживается начиная с Zabbix 2.0.0.

Укажите Тип информации равным ‘Журнал (лог)’ для обработки штампов времени. Обратите внимание, что другие форматы, такие как ‘Числовой’ также приемлемы, но для этого может потребоваться пользовательский обработчик трапов.

3.2 Настройка мониторинга SNMP трапов

Настройка Zabbix сервера/прокси

Для чтения трапов, Zabbix сервер или прокси должны быть настроены на запуск процесса SNMP траппера и должны знать абсолютный путь к файлу с трапами, который заполняется при помощи SNMPTT или получателя трапов Perl. Чтобы это сделать, измените файл конфигурации (zabbix_server.conf или zabbix_proxy.conf):

Настройка SNMPTT

Для начала, snmptrapd необходимо настроить на использование SNMPTT.

При конфигурировании SNMPTT на получение трапов, настройте SNMPTT на журналирование этих трапов:

Теперь отформатируйте трапы, чтобы они распознавались Zabbix’ом (измените snmptt.conf):

Настройка получателя Perl трапов

Требования: Perl, Net-SNMP скомпилированный с —enable-embedded-perl (компилируется по умолчанию начиная с Net-SNMP 5.4)

Получатель трапов Perl (ищите в misc/snmptrap/zabbix_trap_receiver.pl) можно использовать для передачи трапов в Zabbix сервер напрямую с snmptrapd. Для его настройки:

Формат SNMP трапа

Все пользовательские получатели трапов perl и конфигурация SNMPTT трапов должны форматировать трап следующим образом: [штамп времени] [трап, часть 1] ZBXTRAP [адрес] [трап, часть 2], где

Обратите внимание, что “ZBXTRAP” и “[адрес]” при обработке отрезаются из сообщения. Если трап форматируется как-то иначе, Zabbix может разобрать такие трапы неожиданным образом.

Пример трапа:
11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal “Status Events” localhost — ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2
Такое сообщение будет результатом следующего трапа для SNMP интерфейса с IP=192.168.1.1:
11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal “Status Events” localhost — Link down on interface 2. Admin state: 1. Operational state: 2

3.3 Требования к системе

Ротация журнала

Zabbix не предоставляет какую-либо систему ротации журналов — должно быть обработано пользователем. Ротация журналов должна начинаться с переименовывания старого файла и только после этого удалять его, чтобы никакие трапы не пропали:

Файловая система

Из-за реализации файла с трапами, Zabbix’у требуется файловая система с поддержкой inode для того чтобы различать файлы (эта информация берется из вызова stat()).

3.4 Пример установки

Этот пример использует snmptrapd + SNMPTT для передачи трапов Zabbix серверу. Установка:

Новые книги

У большинства руководителей отсутствует представление о бизнес-инструментах и системах, за счет которых создается дополнительная ценность для клиентов, увеличивается качество обслуживания, растут продажи, повышается исполнительская дисциплина. Основная задача этой книги – сформировать понимание этих систем и бизнес-инструментов.

В этой книге рассказывается о том, за счет каких инструментов достигается рост продаж и как не допустить фатальных ошибок при внедрении CRM-системы.

Как не растянуть сроки внедрения на годы и бюджет – на миллионы рублей? Как выбрать лучшее программное решение под задачи вашего бизнеса? Автор подробно описывает пошаговый план автоматизации и стандартизации управления отношениями с клиентами.

PHP не может найти модули SNMP под Windows 7

Я включил модуль SNMP, пытающийся выполнить функции в модуле. Я установил переменную среды MIBDIRS туда, где у меня есть мои mib, но я все еще получаю предупреждения «Не могу найти модуль»:

Мои настройки php.ini:

Я нахожусь в Windows.

И он все еще дает эти ошибки …

Какие-нибудь идеи, пожалуйста?

Документы PHP вводят в заблуждение для Windows; Чтобы избавиться от ошибок и работать с модулем SNMP, вы ДОЛЖНЫ добавить переменную окружения в системе, называемую MIBDIRS, и указывая на местоположение ваших файлов MIB.

Например, в Windows 7 это будут системные свойства> переменные среды> раздел «Пользовательские переменные», нажмите «Создать» и добавьте MIBDIRS со значением C: \ usr \ mibs (или везде, куда вы положили папку mibs).

Файлы должны быть извлечены с использованием пакета Net-SNMP, протестированного с версией net-snmp-5.7.2.1 на PHP 5.4.7 с использованием режима CLI.

В соответствии с страницей PHP SNMP Instllation:

В дистрибутиве Windows Net-SNMP содержатся файлы поддержки для SNMP в каталоге mibs. Этот каталог должен быть перемещен в DRIVE: \ usr \ mibs, где DRIVE должен быть заменен буквой, на которой установлен PHP, egc: \ usr \ mibs. В качестве альтернативы вы можете установить переменную среды MIBDIRS, указанную в вашей папке MIB.

Скопировано из другого сообщения:

По-видимому, есть две переменные среды, которые вы можете установить. Один из них – MIBDIRS, где находятся все файлы MIB. Другой – MIBS, и я считаю, какие модули SNMP вы хотите загрузить. Установив MIBS ALL, я смог избавиться от ошибок

Пакет php не включает папку mibs, то, что вам нужно сделать, это загрузить исходный файл net-snmp и скопировать папку в ваш php-каталог

после этого распакуйте zip-файл и скопируйте папку mibs в папку php

для exmaple, скопируйте его в C: \ PHP \ Extras \ mibs. Добавьте новую системную переменную MIBDIRS. Его значение должно быть: C: \ PHP \ Extras \ mibs

Илон Маск рекомендует:  Opengl лекция №1 введение события сообщения контекст
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL