LINUX.ORG.RU

Помогите с консолью


0

0

Помогите с проблемой на ровном месте. Вообщем написал небольшой скриптик для снятия snmp с cisco. У меня под в консоле работает нормально. На другом компютере под консолью не работает. Стал смотреть и выяснил, что консолька сама переносы строк делает где не надо. Пример у меня:
$snmpwalk -On -OQ -v2c -c public@1 172.23.93.172 .1.3.6.1.2.1.17.4.3.1.1
.1.3.6.1.2.1.17.4.3.1.1.0.0.33.224.214.202 = "00 00 21 E0 D6 CA "
на сервере:
$snmpwalk -On -OQ -v2c -c public@1 172.23.93.172 .1.3.6.1.2.1.17.4.3.1.1
.1.3.6.1.2.1.17.4.3.1.1.0.0.33.224.214.202 = "00 00 21 E0 D6 CA
"
У меня из-за этого весь парсинг летит к чертям. Как только не гуглил не нашёл решения проблемы.
Вопрос что делать?

anonymous
Ответ на: комментарий от delilen

Не, кавычка это оно так обратно откидывает данные. То есть первая строчка это то что я посылаю на железку. Вторая строчка то что обратно приходит. Только вот во втором случае она бьется на две строки. Сейчас посмотрел на 64 символе переносится. Хотя ls -l переносит строго по границе терминала. Похоже snmp команды плюют на переменные среды:( Сейчас версия net-snmp 5.2.1, попробую обновить.

anonymous
()

> У меня под в консоле работает нормально.

А версии bash и других утилит на обоих компьютерах одинаковые?

Igron ★★★★★
()
Ответ на: комментарий от Komintern

Кривулька написанная по мотивам кривульки найденной в интеренете.

#!/usr/bin/perl

our $community = "public";
our $switch = "10.1.0.1";

#Step 0
open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.4.1.9.9.46.1.3.1.1.2|")
or die "Can't run snmpwalk";
while (<SNMP>)
{
chomp;
s@.1.3.6.1.4.1.9.9.46.1.3.1.1.2.1.@@;
s@ @@g;
my ($vlan, $operation) = split /=/;
if ($operation == 1) {push @vlan_table, $vlan;};
}

foreach $vlan ( @vlan_table ) {
#Step 1
print "procissing vlan number $vlan\n";
open(SNMP,"snmpwalk -On -OQ -v2c -c $community@$vlan $switch .1.3.6.1.2.1.17.4.3.1.1|")
or die "Can't run snmpwalk";
while (<SNMP>)
{
chomp;
s@.1.3.6.1.2.1.17.4.3.1.1@@;
my ($oid, $mac) = split /=\s*/;

$_=$mac;
s@"@@g; s@\s*$@@; s@ @:@g; s@(.)@\l\1@g; s@^0@@; s@:0@:@g;
$mac_table{$_}=$oid;
}
close(SNMP);

#Step 2
open(SNMP,"snmpwalk -On -OQ -v2c -c $community@$vlan $switch .1.3.6.1.2.1.17.4.3.1.2|")
or die "Can't run snmpwalk";
while (<SNMP>)
{
chomp;
s@.1.3.6.1.2.1.17.4.3.1.2@@;
my ($oid, $portbridge) = split /=/;
$portbridge =~ s/ //g;
$ports_bridgetable{$oid}=$portbridge;
}
close(SNMP);


#Step 3
open(SNMP,"snmpwalk -On -OQ -v2c -c $community@$vlan $switch .1.3.6.1.2.1.17.1.4.1.2|")
or die "Can't run snmpwalk";
while (<SNMP>)
{
chomp;
s@.1.3.6.1.2.1.17.1.4.1.2.@@;
my ($portbridge, $port) = split /=/;
$port =~ s/ //g;
$portbridge =~ s/ //g;
$ports_table{$portbridge}=$port;
}
close(SNMP);
}

#Step 4
open(SNMP,"snmpwalk -On -OQ -v2c -c $community $switch .1.3.6.1.2.1.31.1.1.1.1|")
or die "Can't run snmpwalk";
while (<SNMP>)
{
chomp;
s@.1.3.6.1.2.1.31.1.1.1.1.@@;
my ($port, $name) = split /=/;
$port =~ s/ //g;
$name =~ s/ //g;
$name_table{$port}=$name;
}
close(SNMP);

#Step 5
foreach $mac (keys %mac_table) {
print "$mac -> ".$name_table{$ports_table{$ports_bridgetable{$mac_table{$mac}}}}."\n";
}

bash версии разные. На моём компе 3.2, там 2.05 версия. Интересует почему другие команды нормально выводят а эта фиг знает как.

anonymous
()
Ответ на: комментарий от Komintern

А это без разницы на перле он или баше. Потому как команды snmpwalk запускаются в bashе а оттуда вывод уже в перл перенаправляется. Я же говорю в обычной консоли если запускать snmpwalk тоже строчки рубит. Пробовал пускать в zsh, sh, pdksh ровно такая же фигня. Похоже это проблема net-snmp. Но основная дрянь что 5.4 не собирается. Ладно и чорт с ним. В перле порублю всё как надо.

anonymous
()

подозреваю влияние флагов форматирования вывода "-On -OQ"

sdio ★★★★★
()
Ответ на: комментарий от Igron

>Дык версии snmpwalk разные?

Дык я вроде указал что разные. Именно кривулька 5.2.1 версия.

>подозреваю влияние флагов форматирования вывода "-On -OQ"

Ага там всё весело:
$snmpwalk -On -v2c -c public@400 172.23.93.172 .1.3.6.1.2.1.17.4.3.1.1
.1.3.6.1.2.1.17.4.3.1.1.0.12.41.173.117.165 = Hex-STRING: 00 0C 29 AD 75 A5

.1.3.6.1.2.1.17.4.3.1.1.0.26.226.141.168.193 = Hex-STRING: 00 1A E2 8D A8 C1

.1.3.6.1.2.1.17.4.3.1.1.0.192.38.161.46.187 = Hex-STRING: 00 C0 26 A1 2E BB

То есть та же самая лишняя строчка получается. Только теперь переносится с 77 символа.
Ладно я уже всё перлом решил - фиг с этим snmp.

anonymous
()
Ответ на: комментарий от mky

>Сопоставьте файлы snmp.conf, может там чего разное есть, например, опция hexOutputLength.

Всё один в один. Даже прописал hexOutputLength 0 - не помогло.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.