2013-06-27 3 views
0

Я использую NetSNMP::Agent в Perl для запроса некоторых значений. Теперь я ищу, как вернуть список. Имена, процессы таблицы и т. Д.Возврат списка от агента SNMP

Создает ли новый элемент дерева для каждого элемента, когда он запрашивается, или есть что-то, что должно быть предопределено? Я вижу похожие списки, когда блуждаю по предопределенным MIB. Просто интересно, какой механизм предназначен для специальных значений.

Также - есть ли способ получить такой список, используя snmpget или требуется ли это snmpwalk каждый раз?

ответ

0

У меня мало опыта использования пакета NetSNMP, я использую NET :: SNMP, но если вы можете больше сотрудничать с тем, что именно вы пытаетесь достичь, и опубликовать некоторый пример кода или конкретные ссылки OID, я мог бы помочь вы ...

+0

Как насчет возвращения списка таблицы из база данных? – ethrbunny

1

Вот код, я использую, чтобы прочитать таблицу (предположим, $ сессия является установить Net :: SNMP сессии):

# I create a large hash of all the OIDs and their names 
my %oidmap = (
    'vsvrServiceName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.8', 
    'vsvrServiceFullName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.9', 
    'vserverFullName' => '.1.3.6.1.4.1.5951.4.1.3.2.1.10', 
    ... 
); 

# Choose which column names I want to extract from table 
my @columnnames = qw(
    vserverFullName 
    vsvrServiceName 
    vsvrServiceFullName 
); 

# Get ALL entries in the table for those columns 
my $vsvrEntries = $session->get_entries(
    -columns => [ map { $oidmap{$_} } @columnnames ], 
    -maxrepetitions => 1, 
); 


# Decode the result column names, column values, and index 
foreach my $key (keys %{$vsvrEntries}) { 
    my $value = $vsvrEntries->{$key}; 

    # scan through OIDs to see if there's a match 
    foreach my $oid_name (@columnnames) { 
     my $oid = $oidmap{ $oid_name }; 
     next if ($key !~ m{^\Q$oid\E\.(.+)$}); 

     my $remainder = $1; 

     print(" $oid_name.$remainder = $value\n"); 
     last; 
    } 
} 

Твердая часть получает список идентификаторов OID. С этой целью вы можете работать их самостоятельно - или найти сервер Linux, копить ваш MIBs в /usr/share/snmp/mibs и использовать Net-SNMP инструменты из командной строки, например:

[email protected]:~$ snmptranslate -I b -O n vsvrServiceName 
.1.3.6.1.4.1.5951.4.1.3.2.1.8 
+0

На самом деле - я ищу, как * генерировать * и возвращать список. EG из базы данных или файлов в папке. – ethrbunny

+0

@ethrbunny oh мои самые искренние извинения Мне следовало бы более внимательно прочитать ваш вопрос; вы сказали * агент *. Обычно агент SNMP возвращает один varbind (ответ) для каждого OID, указанного в одном запросе 'get',' getnext' или 'set'. Таким образом, агент обычно «обрабатывает» аспект списка - и обращается к вашему обработчику один раз для каждого OID для обработки ... –

+0

Итак, создайте «узел» дерева для каждого возвращаемого элемента? Я пытаюсь читать (и понимать) таблицы и контейнеры без большой удачи. Может быть, не связано? – ethrbunny