Страница 1 из 1

Парсинг выдачи snmp в perl

Добавлено: 2010-04-08 10:39:52
Darnet
Суть вследующем, есть есть функция на перл:

Код: Выделить всё

sub parse_switch {
   my ($community, $switch, $command) = @_;

   open(SNMP,"snmpwalk -v2c -c $community $switch $command|");
   while (<SNMP>) {
   chomp;
   my ($oid, $mac) = split /=\s*/;

   $_ = $mac;
   s/\s*$//;s/(?:[^:]+: )((?:[\dA-F]{2}?)+)/$1/;tr/A-F/a-f:/;s/ /:/g;
   $mac_table{$_} = $mac;  
   }
   close(SNMP)
}
Сейчас она возвращает мак адреса в виде 00:43:f5:43:23:32, а нужно чтобы еще и номер вилана. Команда:

Код: Выделить всё

snmpwalk -v2c -c $community $switch $command
выводит вот это:

Код: Выделить всё

RFC1213-MIB::atPhysAddress.325.1.172.16.13.132 = Hex-STRING: 00 03 CD 02 01 EF
где 325 номер вилана, а 00 03 CD 02 01 EF мак адрес. Может кто-нибудь поможет с этой ситуацией.

Re: Парсинг выдачи snmp в perl

Добавлено: 2010-10-03 17:36:26
Alex Keda
переписать - не?

Re: Парсинг выдачи snmp в perl

Добавлено: 2010-10-03 21:25:19
thefree

Код: Выделить всё

sub parse_switch {
   my ($community, $switch, $command) = @_;

   open(SNMP,"snmpwalk -v2c -c $community $switch $command|");
   while (<SNMP>) {
   chomp;
   my ($oid, $mac) = split /=\s*/;

   $_ = $mac;
   s/\s*$//;s/(?:[^:]+: )((?:[\dA-F]{2}?)+)/$1/;tr/A-F/a-f:/;s/ /:/g;
   $mac_table{$_} = $mac;
   if ($oid =~ m/atPhysAddress\.(\d+)/) {
      $oid_table{$oid} = $1;
   }
   }
   close(SNMP)
}