|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Constantin Stefanov 2:5020/400 01 Aug 2006 15:32:17 To : Constantin Stefanov Subject : Re: netdisco под FreeBSD 6.1 - ошибка perl - виноват SNMP.pm из net-snm -------------------------------------------------------------------------------- После некоторых разбирательств, найден (по-моему) виновник безобразия, может, кто подскажет, что делать дальше. Кажется, виноват модуль SNMP.pm, который ставится как часть net-snmp. Конкретно, есть там класс SNMP::Session. У него есть метод bulkwalk. По документации (в предыдущем письме есть) он должен возвратить массив ссылок на массивы с ответами. Hа самом деле, он возвращает ссылку на сам объект SNMP::Session. Вот небольшой пример, который это демонстрирует: ------------------------------------------------------------------------ #!/usr/bin/perl -w use SNMP; use strict; use Data::Dumper; my $sess; my $numInts; my $i; my ($desc, $in, $out); $sess = new SNMP::Session(DestHost => '192.168.0.1', Community => 'public', Version => 2); $numInts = $sess->get('ifNumber.0'); ($desc, $in, $out) = $sess->bulkwalk(0, $numInts, [['ifDescr'], ['ifInOctets'], ['ifOutOctets']]); if($sess->{ErrorNum}) { die "SNMP error happened"; } print Dumper($desc); for $i (0..($numInts - 1)) { printf "Interface %4s: %s inOctets, %s outOctets\n", $$desc[$i]->val, $$in[$i]->val, $$out[$i]->val; } ----------------------------------------------------------------------- Пример, почти один в один списан из perldoc SNMP, добавлена обработка ошибок и вызов Dumper. Вот его выдача: ----------------------------------------------------------------------- $VAR1 = bless( { 'UseLongNames' => 0, 'UseEnums' => 0, 'UseNumeric' => 0, 'BestGuess' => 0, 'SessPtr' => bless( do{\(my $o = 136249856)}, 'SnmpSessionPtr' ), 'LocalPort' => 0, 'ErrorStr' => '', 'UseSprintValue' => 0, 'Community' => 'public', 'ErrorNum' => 0, 'RetryNoSuch' => 0, 'TimeStamp' => undef, 'Retries' => -1, 'Version' => 2, 'ErrorInd' => 0, 'DestHost' => '192.168.0.1', 'Timeout' => -1 }, 'SNMP::Session' ); Not an ARRAY reference at ./test.pl line 24. ----------------------------------------------------------------------- Исследование SNMP.pm показало, что результат функции берется практически напрямую из SNMP.so. В исходнике SNMP.so я уже не разобрался - никогда не имел дела с биндингом сишного кода в перл. Может, кто подскажет, как это все лечить или куда мне теперь податься с этим знанием, где подскажут? -- Константин Стефанов Hа заборе было написано слово "мир" с тремя ошибками. --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6577b1d8a79b.html, оценка из 5, голосов 10
|