Jump to content

Recommended Posts

Posted

Опрашиваю циску 2610 на предмет загрузки канала.

Получаю строка: enterprises.9.2.2.1.1.6.4 = 763000

нужно резать ее так, чтобы получить чисто только цифру 76000.

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

 

кто подкинет функцию. Я просто не умею с этими регулярными выражениями работать, или как они там называются. {/@} :)

 

Ну только Perl, на других языках не нужно.

Спасибо

Posted (edited)

Не хочет, пусто выдает:

 

$str=system("/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4");

$str =~ /.*\s(\d+)/;

$val = $1;

 

 

print "Вход: $val";

 

 

Выдает:

 

router# /usr/home/test/shaper.pl

enterprises.9.2.2.1.1.6.4 = 708000

Вход: router#

 

Трабла в system :)

А так ваше сообщение верное

Edited by Кашмир
Posted

у Perl есть модуль для работы с SNMP

http://search.cpan.org/~dtown/Net-SNMP-5.2.0/lib/Net/SNMP.pm тут можно почитать подробнее, если интересно.. установить модуль можно так (в командной строке с правами рута)

>perl -MCPAN -e shell
>install Net::SNMP
>quit

а вот пример использования данного модуля под Вашу цель

#! /usr/bin/perl

use strict;
use Net::SNMP;

my ($session, $error) = Net::SNMP->session(
                -hostname  => shift || '172.16.1.12',
                -community => shift || 'public',
                -port      => shift || 161
);

if (!defined($session))
{
    printf("ERROR: %s.\n", $error);
    exit 1;
}

my $sysTrafIn = '1.3.6.1.4.1.9.2.2.1.1.6.4';
my $result = $session->get_request(
                -varbindlist => [$sysTrafIn]
);

if (!defined($result))
{
    printf("ERROR: %s.\n", $session->error);
    $session->close;
    exit 1;
}

printf("Link_InComing_Traffic for host '%s' is %s\n",
    $session->hostname, $result->{$sysTrafIn}
);

$session->close;

exit 0;

 

примерно так.. :)

Posted
Не хочет, пусто выдает:

 

$str=system("/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4");

$str =~ /.*\s(\d+)/;

$val = $1;

 

 

print "Вход: $val";

 

 

Выдает:

 

router# /usr/home/test/shaper.pl

enterprises.9.2.2.1.1.6.4 = 708000

Вход: router#

 

Трабла в system :)

А так ваше сообщение верное

$str=`/usr/local/bin/snmpget 00.00.00.00 public .1.3.6.1.4.1.9.2.2.1.1.6.4`;

$str =~ s/.*= (\d+)0\n/$1/;

print "Вход: $str";

 

Но лучше воспользоваться модулем для работы с SNMP.

ИМХО

Posted

Без регулярных выражений

my $input="enterprises.9.2.2.1.1.6.4 = 763000";

my @tmp=split("=",$input);

substr($tmp[1], 0, 1) = "";

Результат в $tmp[1]

 

Регулярное выражение

my $input="enterprises.9.2.2.1.1.6.4 = 763000";

$input=~s/^.*= (.*)$/$1/g;

Результат в $input

 

Сам использую Net::SNMP Но там тоже мороки много :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...