Перейти к содержимому
Калькуляторы

Потребовалась утилитка на Perl, которая бы могла брать с DES-3526/3028/3612 таблицу MAC-адресов сопоставлять ее с номерами портов и VLAN и в выводить все это в примерно таком виде:

 

PORT MAC VID

 

 

Попробовал сделать сам, поискал примеры, чет ничего не получается, может у кого есть примеры решения такой задачи? Помогите пожалуйста!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

забираем по SNMP?

если так, то там выборка по VLAN ID идёт, отдаёт мак - порт

 

а что не получается? вы сами что-то писали, на чём затык?

Изменено пользователем terrible

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Когда-то писал скрипт для выполнения кучи однотипных команд на куче DES-3526 через телнет. Переделать под себя не сложно будет. Если интересно - пишите куда скинуть.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот кусочек кода:

my ($session, $error) = Net::SNMP->session(
        -version     => '2c',
        -timeout     => 10,
        -retries     => 3,
        -hostname    => $ARGV[0],
        -community   => 'public',
        -port        => 161
);

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

my $macTable =".1.3.6.1.2.1.17.7.1.2.2.1.2";

foreach my $oid (oid_lex_sort(keys(%{$session->var_bind_list}))) {
        if ($oid =~ /^$macTable\.[\d]+\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)$/) {
                        my $mac = join ':', map((sprintf '%.2x', $_), ($1, $2, $3, $4, $5, $6));
                        my $port = $session->var_bind_list->{$oid};
                        print "mac: $mac\tport: $port\n";
        }
}

 

вроде корректно скопировал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Когда-то писал скрипт для выполнения кучи однотипных команд на куче DES-3526 через телнет. Переделать под себя не сложно будет. Если интересно - пишите куда скинуть.

Очень интересно! Даже не только для этой цели. Сейчас планирую прописывать QoS и прочие шаблонные радости на куче 3526 и 3028, было бы очень кстати!

 

Можно на почту? hi11er@mail.ru

Изменено пользователем hiller

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

забираем по SNMP?

если так, то там выборка по VLAN ID идёт, отдаёт мак - порт

 

а что не получается? вы сами что-то писали, на чём затык?

Мешает плохое знакомство с Perl, да и с программированием вообше.

 

Что по VID я знаю. Т.е. логика должна быть такой: сначала смотрим какие есть VLANы, потом ищем в них MACи.

 

Я нашел несколько примеров скриптов для этих целей, но все они не учитывали специфику D-Link'a с VID. Отдавали MACи только дефолтного VLANa. Да и MACи печаталь вида 0x0004d79dc100.

 

 

вот кусочек кода:

foreach my $oid (oid_lex_sort(keys(%{$session->var_bind_list}))) {

 

вроде корректно скопировал.

Этот пример самый элегантный из тех, что мне доводилось видеть. Но не работает, ругается на процитированную выше строку "Can't use an undefined value as a HASH reference at ./getfdb5.pl line 21.".

 

Запускаю с параметром - IP свича. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот кусочек кода:

foreach my $oid (oid_lex_sort(keys(%{$session->var_bind_list}))) {

 

вроде корректно скопировал.

Этот пример самый элегантный из тех, что мне доводилось видеть. Но не работает, ругается на процитированную выше строку "Can't use an undefined value as a HASH reference at ./getfdb5.pl line 21.".

 

Запускаю с параметром - IP свича. :(

 

эхххх никто и не обратил внимания ято запрос-то и не выполняется:

пропустил я кусочек скрипта:

my $macTable =".1.3.6.1.2.1.17.7.1.2.2.1.2";

$result = $session->get_table(
        -baseoid        => $macTable,
        -maxrepetitions => 25
);

 

Net::SNMP подключен так:

use Net::SNMP qw(:snmp);

Изменено пользователем XeonVs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно на почту? hi11er@mail.ru

отправил

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

можно telnet && expect - кому интересно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

интересно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно на почту? hi11er@mail.ru

отправил

Огромное спасибо!

 

Какраз то что нужно! Many many THANX :)

 

вот кусочек кода:

foreach my $oid (oid_lex_sort(keys(%{$session->var_bind_list}))) {

 

вроде корректно скопировал.

Этот пример самый элегантный из тех, что мне доводилось видеть. Но не работает, ругается на процитированную выше строку "Can't use an undefined value as a HASH reference at ./getfdb5.pl line 21.".

 

Запускаю с параметром - IP свича. :(

 

эхххх никто и не обратил внимания ято запрос-то и не выполняется:

пропустил я кусочек скрипта:

my $macTable =".1.3.6.1.2.1.17.7.1.2.2.1.2";

$result = $session->get_table(
        -baseoid        => $macTable,
        -maxrepetitions => 25
);

 

Net::SNMP подключен так:

use Net::SNMP qw(:snmp);

Теперь все работает! Огромное спасибо! Буду пытаться переработать, чтобы сначала брался список VLANов, а затем маки в каждом отдельном VLANе.

Не уверен, что справлюсь, но надо попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Получилось!

 

foreach my $oid (oid_lex_sort(keys(%{$session->var_bind_list}))) {

if ($oid =~ /^$macTable\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)$/) {

my $vlan = $1;

my $mac = join ':', map((sprintf '%.2x', $_), ($2, $3, $4, $5, $6, $7));

my $port = $session->var_bind_list->{$oid};

print " mac: $mac\tport: $port\t vlan: $vlan\n";

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну и замечательно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну и замечательно.

Огромнейшее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну и замечательно.

Огромнейшее спасибо!

Нет проблем!

Будут еще похожие вопросы по длинкам, могу подсказать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм... А интересно, Вам не приходилось решать задачу с автоматическим сохранением конфигов свичей в случае, если в них есть отличия?

 

У меня пока есть две мысли на этот счет:

 

1. Хочу SNMP или Telnet пробегаться по свичам, говорить им залить конфигурацию на tftp. Потом директорию с конфигами commit'ить в какой нибудь репазитория, аля cvs, svn и т.п.

 

2. Забирать конфиг по телнету, сравнивать его с предыдущим, если файлы разные, переименовывать старый вариант в name_%d-%m-%y.cfg, отсылать diff админу и/или писать в базу.

 

Второй вариант мне больше нравится т.к. более гибок и не использует svn.

Буду пробывать реализовать, но велосипед изобретать совершенно не хочется :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тут рядом есть тема про программу NOC... Смотрите туда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

NOC'ом так же можно получить vlan'ы и mac-адреса со свича.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм... А интересно, Вам не приходилось решать задачу с автоматическим сохранением конфигов свичей в случае, если в них есть отличия?

 

У меня пока есть две мысли на этот счет:

 

1. Хочу SNMP или Telnet пробегаться по свичам, говорить им залить конфигурацию на tftp. Потом директорию с конфигами commit'ить в какой нибудь репазитория, аля cvs, svn и т.п.

 

2. Забирать конфиг по телнету, сравнивать его с предыдущим, если файлы разные, переименовывать старый вариант в name_%d-%m-%y.cfg, отсылать diff админу и/или писать в базу.

 

Второй вариант мне больше нравится т.к. более гибок и не использует svn.

Буду пробывать реализовать, но велосипед изобретать совершенно не хочется :)

пример решения задачи

http://wiki.sirmax.noname.com.ua/index.php...k_config_backup

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тут рядом есть тема про программу NOC... Смотрите туда.

Да, я видел. У меня есть необходимость интегрирования обсуждаемых здесь функций в существующую систему, поэтому NOC не совсем подходит :(

 

пример решения задачи

http://wiki.sirmax.noname.com.ua/index.php...k_config_backup

Хороший пример, перепишу его на perl и маленько модернизирую под свои задачи, если выйдет чтото толковое, здесь выложу результат. Спасибо!

 

NOC'ом так же можно получить vlan'ы и mac-адреса со свича.

Хм... Пойду смотреть, как это там реализовано, может чего нового подчерпну...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тут рядом есть тема про программу NOC... Смотрите туда.

Да, я видел. У меня есть необходимость интегрирования обсуждаемых здесь функций в существующую систему, поэтому NOC не совсем подходит :(

Все функции service activation можно дергать по XML-RPC.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

XML-RPC я представляю только в теории. На практике не приходилось сталкиваться, ну кроме платежных терминалов наверно. Спасибо за совет, обращу внимание...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

XML-RPC я представляю только в теории. На практике не приходилось сталкиваться, ну кроме платежных терминалов наверно. Спасибо за совет, обращу внимание...
Там ничего даже в теории представлять не надо. На python оно выглядит в несколько строк

http://trac.nocproject.org/trac/browser/sa/views.py#L32 (см. get_result)

На Perl примерно так же

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет всем!

А можно мне на почту тоже прогу на перле которая по telnet нужные вещи делает. Спасибо.

toropovsn@ya.ru

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

отправил

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.