Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание расширения для net-snmp 
V
    Опции темы
kyzia887
Дата 17.9.2013, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Цитата(igormat @ 17.9.2013,  11:33)
Добрый день, а никто не может посоветовать литературу по Net-SNMP с точки зрения девелоперов? А то туториалы на официальном сайте очень скудные.

Лично я, когда занимался этим вопросом, так толком ни чего и не нашел, кроме различных статей и офф. сайта.
PM MAIL   Вверх
igormat
Дата 17.9.2013, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.9.2013

Репутация: нет
Всего: нет



Тогда вопрос. Как из запроса вычленить нужную ячейку таблицы и  ответить? Из предыдущего примера не видно где именно задается значение в ОТВЕТЕ. Или же мы просто задаем значение в таблице, а уже сам Net-SNMP достает значение?
PM MAIL   Вверх
igormat
Дата 17.9.2013, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.9.2013

Репутация: нет
Всего: нет



И не могли бы привести статьи касаемо обработки таблиц в Net-SNMP?
PM MAIL   Вверх
Vorlon
  Дата 16.10.2013, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.10.2013

Репутация: нет
Всего: нет



kyzia887,  здравствуй.
Если при общении с роутером на основе примера 
Код
net-snmp.org
 при подаче OID snmpget возвращает:
No such Object available on this agent at this OID - с чем это связано?  Что необходимо сделать на уровне кода, чтобы роутер всё-таки ответил?
(Только учусь и страдаю)

Добавлено через 9 минут и 31 секунду
Пример - если необходимо - сразу готов сюда выложить. )
PM MAIL   Вверх
kyzia887
Дата 16.10.2013, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Цитата

Vorlon:
No such Object available on this agent at this OID - с чем это связано?  Что необходимо сделать на уровне кода, чтобы роутер всё-таки ответил?


Скорее всего у вас не подключен MIB файл с OID-ом по которому вы обращаетесь. Посмотрите в начале темы, я там описывал как что делал. Но это все проверялось на локальных машинах. Железки я вообще не трогал, т.к. это не требовалось.

Это сообщение отредактировал(а) kyzia887 - 16.10.2013, 11:12
PM MAIL   Вверх
Vorlon
Дата 16.10.2013, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.10.2013

Репутация: нет
Всего: нет



MIB-файл есть.

Для его подключения надо обязательно создавать SNMPExtended.c и h и собирать в so?

Можно MIB-файл напрямую привязать в snmpd.conf?

Добавлено через 8 минут и 9 секунд
Или по имени и пути MIB-файла привязать его в самом коде, например, в конструкторе?
PM MAIL   Вверх
kyzia887
Дата 16.10.2013, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



MIB файл только описывает что и как запрашивать. Файл библиотеки (*.so - linux, *.dll - windows) собственно и выдает результат.
PM MAIL   Вверх
kyzia887
  Дата 11.2.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Внесу небольшие поправки во все выше описанное. 
Прошло чуть меньше 3-х лет и мне снова пришлось залезть в свои исходники и наклепать очередной модуль для Net-SNMP.
Увы. Он не завелся вот так сразу, что было для меня весьма удивительно, ведь делал все в точности как сам же и писал ранее.

Опишу две основные ошибки:
  • Не корректный MIB файл
  • Не корректный путь к библиотеке в snmpd.conf
Много писать не буду, а выложу исходники и примеры запросов.
PS: Использовал Qt 4.8.4

PhoenixNetSnmpTableModule.pro
Код

QT      -= gui

TARGET   = PhoenixServicesTable
TEMPLATE = lib
DESTDIR  = dist

SOURCES += PhoenixNetSnmpTableModule.cpp

HEADERS += PhoenixNetSnmpTableModule.h


PhoenixNetSnmpTableModule.h
Код

#ifndef PHOENIXNETSNMPTABLEMODULE_H
#define PHOENIXNETSNMPTABLEMODULE_H

#ifdef __cplusplus
extern "C" {
#endif

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>

// function declarations
void init_PhoenixServicesTable(void);

int handle_node_PhoenixNetSnmpTableModule(netsnmp_mib_handler          *handler,
                                                                                         netsnmp_handler_registration *reginfo,
                                                                                         netsnmp_agent_request_info   *reqinfo,
                                                                                         netsnmp_request_info         *requests);

void deinit_PhoenixServicesTable(void);

#ifdef __cplusplus
}
#endif

#endif // PHOENIXNETSNMPTABLEMODULE_H


PhoenixNetSnmpTableModule.cpp
Код

#include "PhoenixNetSnmpTableModule.h"
#include <QProcess>
#include <QTextStream>
#include <QVector>

#ifdef __cplusplus
extern "C" {
#endif

int numberProcessFound = 0;
netsnmp_table_data_set *table_set;
oid PhoenixNetSnmpTableModule_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 2, 5, 1, 1, 1, 1, 2 };

void init_PhoenixServicesTable(void)
{
    DEBUGMSGTL(("PhoenixServicesTable",
                                  "Initializing the PhoenixServicesTable module\n"));

    table_set = netsnmp_create_table_data_set("PhoenixServicesTable");

    // allow the creation of new rows via SNMP SETs
    table_set->allow_creation = 1;

    // set up what a row "should" look like, starting with the index
    netsnmp_table_dataset_add_index(table_set, ASN_OCTET_STR);

    // define what the columns should look like.
    netsnmp_table_set_add_default_row(table_set,
                                                                         // column 2 = ASN_OCTET_STR,
                                                                         // writable = 1,
                                                                         // default value = NULL,
                                                                         // default value len = 0
                                                                         2, ASN_OCTET_STR, 1, NULL, 0);

    // if we wanted to handle specific data in a specific way, or note
    // when requests came in we could change the NULL below to a valid
    // handler method in which we could over ride the default
    // behaviour of the table_dataset helper
    netsnmp_handler_registration *PhoenixNetSnmpTableModule;
    PhoenixNetSnmpTableModule = netsnmp_create_handler_registration("Module PhoenixServicesTable",
                                                                                                                                      handle_node_PhoenixNetSnmpTableModule,
                                                                                                                                      PhoenixNetSnmpTableModule_oid,
                                                                                                                                      OID_LENGTH(PhoenixNetSnmpTableModule_oid),
                                                                                                                                      HANDLER_CAN_RONLY);


    netsnmp_register_table_data_set(PhoenixNetSnmpTableModule,
                                                                    table_set,
                                                                    NULL);

    // register the table
    netsnmp_register_auto_data_table(table_set, NULL);

    DEBUGMSGTL(("PhoenixServicesTable",
                                  "Done initalizing PhoenixServicesTable module\n"));
}

int handle_node_PhoenixNetSnmpTableModule(netsnmp_mib_handler *handler,
                                                                                         netsnmp_handler_registration *reginfo,
                                                                                         netsnmp_agent_request_info *reqinfo,
                                                                                         netsnmp_request_info *requests)
{
    /** delete all row **/
    if(numberProcessFound != 0) {
        netsnmp_table_row *firstRow = netsnmp_table_data_set_get_first_row(table_set);
        while(firstRow != NULL) {
            netsnmp_table_row *nextRow = netsnmp_table_data_set_get_next_row(table_set, firstRow);
            netsnmp_table_dataset_remove_row(table_set, firstRow);
            firstRow = nextRow;
        }
    }
    /** -------------- **/

    QString allProcessMap = "";
    QProcess process;
    QStringList commandProcess;
    commandProcess << "ax";
    process.start("ps", commandProcess);
    if(!process.waitForStarted(30000)) {
        return SNMP_ERR_GENERR;
    }

    QVector <QString> processValue;

    int readStop = 0;
    while(readStop != 1) {
        if(process.waitForReadyRead(30000)) {
            QByteArray processLine = process.readAllStandardOutput();
            QTextStream processOutLocal(processLine);
            allProcessMap = allProcessMap + processOutLocal.readAll();
        } else {
            //qDebug() << "Error Read!";
            readStop = 1;
        }
    }
    process.close();

    QTextStream processOut(&allProcessMap);
    while(!processOut.atEnd()) {
        QString readLine = processOut.readLine();
        QStringList splitReadLine = readLine.split(" ");
        for(int i = 0; i < splitReadLine.size(); i++) {
            QString readLineNext = splitReadLine.operator [](i);
            QStringList splitReadLineNext = readLineNext.split("/");
            for(int j = 0; j < splitReadLineNext.size(); j++) {
                if(splitReadLineNext.operator [](j) == "qtcreator") { //find qtcreator
                    processValue.push_back("qtcreator|ok");
                }
            }
        }
    }

    numberProcessFound = processValue.size(); //save default number process
    if(processValue.size() != 0) {
        for(int i = 0; i < processValue.size(); i++) {
            // add row in table
            // create the a row for the table, and add the data
            netsnmp_table_row *row;
            row = netsnmp_create_table_data_row();

            // set the index to the table row
            u_long tableIndex = (u_long) i;
            netsnmp_table_row_add_index(row, ASN_INTEGER, (u_char*) & tableIndex, sizeof(int));

            // set column 2 to be the table
            QString tableValue = processValue.operator [](i);
            netsnmp_set_row_column(row, 2, ASN_OCTET_STR, (u_char *) tableValue.toStdString().c_str(), tableValue.size());
            netsnmp_mark_row_column_writable(row, 2, 1);  // make writable via SETs

            // add the row to the table
            netsnmp_table_dataset_add_row(table_set, row);
        }
    } else {
        //return SNMP_ERR_GENERR;
    }

    return SNMP_ERR_NOERROR;
}

void deinit_PhoenixServicesTable(void)
{
    netsnmp_table_dataset_remove_and_delete_row(table_set, NULL);
    netsnmp_delete_table_data_set(table_set);
    table_set = NULL;
}

#ifdef __cplusplus
}
#endif


NET-SNMP-PHOENIX-MIB.txt (копируем в /usr/share/snmp/mibs/)
Код

NET-SNMP-PHOENIX-MIB DEFINITIONS ::= BEGIN

IMPORTS
    netSnmpExamples                FROM NET-SNMP-EXAMPLES-MIB
    OBJECT-TYPE, Integer32,
    MODULE-IDENTITY                FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP        FROM SNMPv2-CONF;

netSnmpPhoenixMIB MODULE-IDENTITY
    LAST-UPDATE  "201402110000Z"        --11 february 2014
    ORGANIZATION " "
    CONTACT-INFO "SPb"

    DESCRIPTION "Mib for phoenix modules."

    ::= { netSnmpExamples 5 }

PhoenixMibObjects        OBJECT IDENTIFIER ::= { netSnmpPhoenixMIB 1 }

PhoenixAgentModules        OBJECT IDENTIFIER ::= { PhoenixMibObjects 1 }

PhoenixTables        OBJECT IDENTIFIER ::= { PhoenixAgentModules 1 }

PhoenixServicesTable OBJECT-TYPE
    SYNTAX        SEQUENCE OF PhoenixServicesDataTable
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
        "This Phoenix Services tables"
    ::= { PhoenixTables 1 }

PhoenixServicesDataTable OBJECT-TYPE
    SYNTAX        PhoenixServicesDataTable
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
        "A row value"
    INDEX { PhoenixServicesData }
    ::= { PhoenixServicesTable 1 }

PhoenixServicesDataTable ::= SEQUENCE {
    PhoenixServicesData        OCTET STRING,
    PhoenixServicesDataNumber    INTEGER
}

PhoenixServicesData OBJECT-TYPE
    SYNTAX        OCTET STRING
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
        "Service Data for Phoenix"

    ::= { PhoenixServicesDataTable 1 }

PhoenixServicesDataNumber OBJECT-TYPE
    SYNTAX        INTEGER
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
        "Number Service Data for Phoenix"

    ::= { PhoenixServicesDataTable 2 }

END


snmpd.conf (/etc/snmp/snmpd.conf)
Код

syslocation Server Room
syscontact Sysadmin (root@localhost)

rocommunity public 127.0.0.1

dlmod PhoenixServicesTable /home/anton/SnmpDist/libPhoenixServicesTable.so


Теперь главные моменты:
  • Собирал в QtCreator-е (то что он еще до кучи пару тройку символических ссылок делает ни на что не влияет; копипастим куда нужно и не думаем ни о чем)
  • Функции void init_PhoenixServicesTable(void) и void deinit_PhoenixServicesTable(void); init_ИМЯ, КОТОРОЕ УКАЗАЛИ В SNMPD.CONF! deinit_ИМЯ, КОТОРОЕ УКАЗАЛИ В SNMPD.CONF! (если иначе, то просто ни чего не будет работать, т.к. Net-SNMP вряд ли сможет корректно распознать расширение)
  • Так как QtCreator на выходе генерирует библиотеку с префиксом lib, то и его указываем в snmpd.conf (ну нужно ему полное имя и все тут), т.е.: dlmod PhoenixServicesTable /home/anton/SnmpDist/libPhoenixServicesTable.so
В остальном все как и раньше, читайте посты выше.

PS: Если у вас не работает ваш модуль (ошибка из серии: No such Object available on this agent at this OID), то проверить из-за чего можно командой:
Код

./snmptable -c public -v 2c localhost UCD-DLMOD-MIB::dlmodTable

SNMP table: UCD-DLMOD-MIB::dlmodTable

            dlmodName                                       dlmodPath dlmodError dlmodStatus
 PhoenixServicesTable /home/anton/SnmpDist/libPhoenixServicesTable.so                 loaded


Если расширение не загрузилось, то будет хоть как-то описана причина. Например:
Код

./snmptable -c public -v 2c localhost UCD-DLMOD-MIB::dlmodTable

SNMP table: UCD-DLMOD-MIB::dlmodTable

            dlmodName                                        dlmodPath                                                                                                                 dlmodError dlmodStatus
 PhoenixServicesTable /home/anton/SnmpDist/libPhoenixServicesTable1.so dlopen failed: /home/anton/SnmpDist/libPhoenixServicesTable1.so: cannot open shared object file: No such file or directory       error


Может возникнуть косяк из-за того что Net-SNMP не подгрузит MIB. Выполняем следующее:
Код

./snmptranslate -M+. -mNET-SNMP-PHOENIX-MIB -Tp -IR netSnmpPhoenixMIB                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Expected LAST-UPDATED (LAST-UPDATE): At line 10 in /usr/share/snmp/mibs/NET-SNMP-PHOENIX-MIB.txt                                                                                                                                                   
+--netSnmpPhoenixMIB(5)                                                                                                                                                                                                                            
   |                                                                                                                                                                                                                                               
   +--PhoenixMibObjects(1)
      |
      +--PhoenixAgentModules(1)
         |
         +--PhoenixTables(1)
            |
            +--PhoenixServicesTable(1)
               |
               +--PhoenixServicesDataTable(1)
                  |  Index: PhoenixServicesData
                  |
                  +-- -R-- String    PhoenixServicesData(1)
                  +-- -R-- INTEGER   PhoenixServicesDataNumber(2)


Ниже прикладываю исходники (мало ли что)  smile 

Это сообщение отредактировал(а) kyzia887 - 11.2.2014, 12:53

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  PhoenixNetSnmpTableModule.zip 3,85 Kb
PM MAIL   Вверх
mchertz
Дата 23.6.2014, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.6.2014

Репутация: нет
Всего: нет



Спасибо автору=)

Это сообщение отредактировал(а) mchertz - 27.6.2014, 21:35
PM MAIL   Вверх
WOLFY17
Дата 26.4.2017, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 26.4.2017

Репутация: нет
Всего: нет



kyzia887, спасибо за подробное описание.
Не могу понять некоторых вещей: 
1. Для чего мы создаём пункты таблицы в MIB, если мы её создаём на уровне кода?
2. В каком случае должен вызываться обработчик, к которому привязана таблица (т. е. после какой команды из консоли). я думал что после snmpset или snmpget того OIDа, на котором висит таблица, но это не работает. Вообще не очень понимаю по какому принципу работает таблица
Поясни, если не тяжело)

PM MAIL   Вверх
kyzia887
Дата 27.4.2017, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Цитата(WOLFY17 @ 26.4.2017,  13:34)
kyzia887, спасибо за подробное описание.
Не могу понять некоторых вещей: 
1. Для чего мы создаём пункты таблицы в MIB, если мы её создаём на уровне кода?
2. В каком случае должен вызываться обработчик, к которому привязана таблица (т. е. после какой команды из консоли). я думал что после snmpset или snmpget того OIDа, на котором висит таблица, но это не работает. Вообще не очень понимаю по какому принципу работает таблица
Поясни, если не тяжело)

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

Пример запроса таблицы:
Код

snmpwalk -v 2c -c public 127.0.0.1 .1.2.3.4.5 


А вот уже единичное значение (например sysname oid = 1.3.6.1.2.1.1.5 ) нужно запрашивать через snmpget.
Пример запроса sysname:
Код

snmpget -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.1.5.0


К слову, если углубиться в код команды snmpwalk, то это лишь запросы snmpgetnext, выполняющиеся до тех пор, пока возвращаемые данные являются дочерними элементами таблицы.

Это сообщение отредактировал(а) kyzia887 - 27.4.2017, 15:48
PM MAIL   Вверх
WOLFY17
Дата 2.5.2017, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 в коде?

Кстати, при запросе получаю следующие значения
Код

snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.8072.2
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.0 = INTEGER: 5
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.1 = INTEGER: 6
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.2 = INTEGER: 7
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.3 = INTEGER: 8
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.4 = INTEGER: 9

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 не работает:
Код

snmpget -v 2c -c public 127.0.0.1 iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.2
iso.3.6.1.4.1.8072.2.5.1.1.1.1.2.1.2.2 = No Such Instance currently exists at this OID


Заранее спасибо за ответ)

Это сообщение отредактировал(а) WOLFY17 - 2.5.2017, 15:38
PM MAIL   Вверх
katenka141
Дата 19.5.2017, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.5.2017

Репутация: нет
Всего: нет



Есть такой вопрос. Могу ли я как-то создать обработчик всех OID'ов начиная с определенного, например, .1.3.6.1.4.1.8072...., и уже в своем обработчике перебирать дочерние номера и решать какому из них какое значение устанавливать?
Ведь, как я понял, у Вас в примере показывается, как обрабатывать определенные значения OID'ов.
И еще вопрос. Могу ли я создать подобное расширение агента без внедрение соответствующего MIB-модуля? 

ege.org.ru
ege.net.ru
PM MAIL   Вверх
kyzia887
Дата 19.5.2017, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Цитата(WOLFY17 @  2.5.2017,  11:37 Найти цитируемый пост)
WOLFY17


Боюсь что конкретное значение врядли получиться запросить, либо пробовать команду snmpgetnext.

А для более точного понимания что и как происходит попробуйте воспользоваться каким-нибудь MIB-браузером (qtmib, oid view и т.д.), он вам более детально все должен показать.

Это сообщение отредактировал(а) kyzia887 - 19.5.2017, 16:14
PM MAIL   Вверх
kyzia887
Дата 19.5.2017, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 26.8.2011

Репутация: 1
Всего: 1



Цитата(katenka141 @ 19.5.2017,  00:13)
Есть такой вопрос. Могу ли я как-то создать обработчик всех OID'ов начиная с определенного, например, .1.3.6.1.4.1.8072...., и уже в своем обработчике перебирать дочерние номера и решать какому из них какое значение устанавливать?
Ведь, как я понял, у Вас в примере показывается, как обрабатывать определенные значения OID'ов.
И еще вопрос. Могу ли я создать подобное расширение агента без внедрение соответствующего MIB-модуля? 

ege.org.ru
ege.net.ru

1. Могу ли я как-то создать обработчик всех OID'ов начиная с определенного - могу ошибаться, но вроде бы нет. Тут более точно можно сказать, если детально изучить интерфейсы, которые предоставляет net-snmp.
2. Могу ли я создать подобное расширение агента без внедрение соответствующего MIB-модуля? - если я не ошибаюсь, то да, можете. Вроде бы net-snmp служба (snmpd) не лезет в MIB-файл, а зачитывает OID из модуля при его регистрации.
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.