|
Модераторы: xvr |
|
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Лично я, когда занимался этим вопросом, так толком ни чего и не нашел, кроме различных статей и офф. сайта. |
|||
|
||||
igormat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.9.2013 Репутация: нет Всего: нет |
Тогда вопрос. Как из запроса вычленить нужную ячейку таблицы и ответить? Из предыдущего примера не видно где именно задается значение в ОТВЕТЕ. Или же мы просто задаем значение в таблице, а уже сам Net-SNMP достает значение?
|
|||
|
||||
igormat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.9.2013 Репутация: нет Всего: нет |
И не могли бы привести статьи касаемо обработки таблиц в Net-SNMP?
|
|||
|
||||
Vorlon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 16.10.2013 Репутация: нет Всего: нет |
kyzia887, здравствуй.
Если при общении с роутером на основе примера
No such Object available on this agent at this OID - с чем это связано? Что необходимо сделать на уровне кода, чтобы роутер всё-таки ответил? (Только учусь и страдаю) Добавлено через 9 минут и 31 секунду Пример - если необходимо - сразу готов сюда выложить. ) |
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Скорее всего у вас не подключен MIB файл с OID-ом по которому вы обращаетесь. Посмотрите в начале темы, я там описывал как что делал. Но это все проверялось на локальных машинах. Железки я вообще не трогал, т.к. это не требовалось. Это сообщение отредактировал(а) kyzia887 - 16.10.2013, 11:12 |
|||
|
||||
Vorlon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 16.10.2013 Репутация: нет Всего: нет |
MIB-файл есть.
Для его подключения надо обязательно создавать SNMPExtended.c и h и собирать в so? Можно MIB-файл напрямую привязать в snmpd.conf? Добавлено через 8 минут и 9 секунд Или по имени и пути MIB-файла привязать его в самом коде, например, в конструкторе? |
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
MIB файл только описывает что и как запрашивать. Файл библиотеки (*.so - linux, *.dll - windows) собственно и выдает результат.
|
|||
|
||||
kyzia887 |
|
||||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Внесу небольшие поправки во все выше описанное.
Прошло чуть меньше 3-х лет и мне снова пришлось залезть в свои исходники и наклепать очередной модуль для Net-SNMP. Увы. Он не завелся вот так сразу, что было для меня весьма удивительно, ведь делал все в точности как сам же и писал ранее. Опишу две основные ошибки:
PS: Использовал Qt 4.8.4 PhoenixNetSnmpTableModule.pro
PhoenixNetSnmpTableModule.h
PhoenixNetSnmpTableModule.cpp
NET-SNMP-PHOENIX-MIB.txt (копируем в /usr/share/snmp/mibs/)
snmpd.conf (/etc/snmp/snmpd.conf)
Теперь главные моменты:
PS: Если у вас не работает ваш модуль (ошибка из серии: No such Object available on this agent at this OID), то проверить из-за чего можно командой:
Если расширение не загрузилось, то будет хоть как-то описана причина. Например:
Может возникнуть косяк из-за того что Net-SNMP не подгрузит MIB. Выполняем следующее:
Ниже прикладываю исходники (мало ли что) Это сообщение отредактировал(а) kyzia887 - 11.2.2014, 12:53 Присоединённый файл ( Кол-во скачиваний: 29 ) PhoenixNetSnmpTableModule.zip 3,85 Kb |
||||||||||||||||
|
|||||||||||||||||
mchertz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.6.2014 Репутация: нет Всего: нет |
Спасибо автору=)
Это сообщение отредактировал(а) mchertz - 27.6.2014, 21:35 |
|||
|
||||
WOLFY17 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.4.2017 Репутация: нет Всего: нет |
kyzia887, спасибо за подробное описание.
Не могу понять некоторых вещей: 1. Для чего мы создаём пункты таблицы в MIB, если мы её создаём на уровне кода? 2. В каком случае должен вызываться обработчик, к которому привязана таблица (т. е. после какой команды из консоли). я думал что после snmpset или snmpget того OIDа, на котором висит таблица, но это не работает. Вообще не очень понимаю по какому принципу работает таблица Поясни, если не тяжело) |
|||
|
||||
kyzia887 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
1. Для чего мы создаём пункты таблицы в MIB - для себя и для сторонних разработчиков, если они захотят запросить ваши данные (ведь MIB содержит описание возвращаемых данных) 2. В каком случае должен вызываться обработчик, к которому привязана таблица - после запроса snmpwalk или snmpgetnext В том примере, который я описал, таблица не имеет постоянного размера (может быть 1 или N строк в зависимости от конфигурационного файла самого модуля), поэтому в своем коде я запрашивал эти данные командой snmpwalk, т.к. она выгрузит вам все дочерние элементы этой таблицы. Например oid таблицы = .1.2.3.4.5, тогда все строки которые вы создадите будут имет oid-ы: 1 - .1.2.3.4.5.1 2 - .1.2.3.4.5.2 N - .1.2.3.4.5.N Пример запроса таблицы:
А вот уже единичное значение (например sysname oid = 1.3.6.1.2.1.1.5 ) нужно запрашивать через snmpget. Пример запроса sysname:
К слову, если углубиться в код команды snmpwalk, то это лишь запросы snmpgetnext, выполняющиеся до тех пор, пока возвращаемые данные являются дочерними элементами таблицы. Это сообщение отредактировал(а) kyzia887 - 27.4.2017, 15:48 |
||||||
|
|||||||
WOLFY17 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.4.2017 Репутация: нет Всего: нет |
kyzia887,
Спасибо за ответ, не думал, что дождусь ответа через 3 года после активности в теме)) А почему мы в коде пишем oid таблицы 1.3.6.1.4.1.8072.2.5.1.1.1.1.2, если, судя по MIB, она будет иметь oid 1.3.6.1.4.1.8072.2.5.1.1.1.1, что означает последняя двойка в записи oid в коде? Кстати, при запросе получаю следующие значения
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2 - это oid таблицы из кода; предпоследняя цифра 2 -это, я так понимаю, столбец, который мы заполняем в строке; последние цифры 0-4 это, наверное, индексы (кстати, вы не могли бы пояснить что они означают? ведь мы указали таблицу, создали запись в ней(строку), указали поле (столбец), что же тогда обозначает этот индекс?) А вот откуда появилась единица между oid'ом таблицы и номером столбца (iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.0) я понять никак не могу)) Может это порядковый номер записи? Если так, то как тогда создать вторую запись в таблице? А как в данном случае запрашивать конкретное значение из таблицы? Команда snmpget по oid не работает:
Заранее спасибо за ответ) Это сообщение отредактировал(а) WOLFY17 - 2.5.2017, 15:38 |
||||
|
|||||
katenka141 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.5.2017 Репутация: нет Всего: нет |
Есть такой вопрос. Могу ли я как-то создать обработчик всех OID'ов начиная с определенного, например, .1.3.6.1.4.1.8072...., и уже в своем обработчике перебирать дочерние номера и решать какому из них какое значение устанавливать?
Ведь, как я понял, у Вас в примере показывается, как обрабатывать определенные значения OID'ов. И еще вопрос. Могу ли я создать подобное расширение агента без внедрение соответствующего MIB-модуля? ege.org.ru ege.net.ru |
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
Боюсь что конкретное значение врядли получиться запросить, либо пробовать команду snmpgetnext. А для более точного понимания что и как происходит попробуйте воспользоваться каким-нибудь MIB-браузером (qtmib, oid view и т.д.), он вам более детально все должен показать. Это сообщение отредактировал(а) kyzia887 - 19.5.2017, 16:14 |
|||
|
||||
kyzia887 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 26.8.2011 Репутация: 1 Всего: 1 |
1. Могу ли я как-то создать обработчик всех OID'ов начиная с определенного - могу ошибаться, но вроде бы нет. Тут более точно можно сказать, если детально изучить интерфейсы, которые предоставляет net-snmp. 2. Могу ли я создать подобное расширение агента без внедрение соответствующего MIB-модуля? - если я не ошибаюсь, то да, можете. Вроде бы net-snmp служба (snmpd) не лезет в MIB-файл, а зачитывает OID из модуля при его регистрации. |
|||
|
||||
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |