hiller Posted August 9, 2009 · Report post Потребовалась утилитка на Perl, которая бы могла брать с DES-3526/3028/3612 таблицу MAC-адресов сопоставлять ее с номерами портов и VLAN и в выводить все это в примерно таком виде: PORT MAC VID Попробовал сделать сам, поискал примеры, чет ничего не получается, может у кого есть примеры решения такой задачи? Помогите пожалуйста! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
terrible Posted August 9, 2009 (edited) · Report post забираем по SNMP? если так, то там выборка по VLAN ID идёт, отдаёт мак - порт а что не получается? вы сами что-то писали, на чём затык? Edited August 9, 2009 by terrible Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
a_andry Posted August 10, 2009 · Report post Когда-то писал скрипт для выполнения кучи однотипных команд на куче DES-3526 через телнет. Переделать под себя не сложно будет. Если интересно - пишите куда скинуть. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
XeonVs Posted August 10, 2009 · Report post вот кусочек кода: 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"; } } вроде корректно скопировал. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 10, 2009 (edited) · Report post Когда-то писал скрипт для выполнения кучи однотипных команд на куче DES-3526 через телнет. Переделать под себя не сложно будет. Если интересно - пишите куда скинуть. Очень интересно! Даже не только для этой цели. Сейчас планирую прописывать QoS и прочие шаблонные радости на куче 3526 и 3028, было бы очень кстати! Можно на почту? hi11er@mail.ru Edited August 10, 2009 by hiller Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 10, 2009 · Report post забираем по 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 свича. :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
XeonVs Posted August 10, 2009 (edited) · Report post вот кусочек кода: 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); Edited August 10, 2009 by XeonVs Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
a_andry Posted August 10, 2009 · Report post Можно на почту? hi11er@mail.ru отправил Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Giga-Byte Posted August 10, 2009 · Report post можно telnet && expect - кому интересно Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Gunner Posted August 10, 2009 · Report post интересно Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 10, 2009 · Report post Можно на почту? 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е. Не уверен, что справлюсь, но надо попробовать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 10, 2009 · Report post Получилось! 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"; } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
XeonVs Posted August 10, 2009 · Report post Ну и замечательно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 10, 2009 · Report post Ну и замечательно. Огромнейшее спасибо! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
XeonVs Posted August 10, 2009 · Report post Ну и замечательно. Огромнейшее спасибо! Нет проблем!Будут еще похожие вопросы по длинкам, могу подсказать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 11, 2009 · Report post Хм... А интересно, Вам не приходилось решать задачу с автоматическим сохранением конфигов свичей в случае, если в них есть отличия? У меня пока есть две мысли на этот счет: 1. Хочу SNMP или Telnet пробегаться по свичам, говорить им залить конфигурацию на tftp. Потом директорию с конфигами commit'ить в какой нибудь репазитория, аля cvs, svn и т.п. 2. Забирать конфиг по телнету, сравнивать его с предыдущим, если файлы разные, переименовывать старый вариант в name_%d-%m-%y.cfg, отсылать diff админу и/или писать в базу. Второй вариант мне больше нравится т.к. более гибок и не использует svn. Буду пробывать реализовать, но велосипед изобретать совершенно не хочется :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mikevlz Posted August 11, 2009 · Report post тут рядом есть тема про программу NOC... Смотрите туда. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dvolodin Posted August 11, 2009 · Report post NOC'ом так же можно получить vlan'ы и mac-адреса со свича. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
HoatDog Posted August 11, 2009 · Report post Хм... А интересно, Вам не приходилось решать задачу с автоматическим сохранением конфигов свичей в случае, если в них есть отличия? У меня пока есть две мысли на этот счет: 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 11, 2009 · Report post тут рядом есть тема про программу NOC... Смотрите туда. Да, я видел. У меня есть необходимость интегрирования обсуждаемых здесь функций в существующую систему, поэтому NOC не совсем подходит :( пример решения задачиhttp://wiki.sirmax.noname.com.ua/index.php...k_config_backup Хороший пример, перепишу его на perl и маленько модернизирую под свои задачи, если выйдет чтото толковое, здесь выложу результат. Спасибо! NOC'ом так же можно получить vlan'ы и mac-адреса со свича. Хм... Пойду смотреть, как это там реализовано, может чего нового подчерпну... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dvolodin Posted August 11, 2009 · Report post тут рядом есть тема про программу NOC... Смотрите туда. Да, я видел. У меня есть необходимость интегрирования обсуждаемых здесь функций в существующую систему, поэтому NOC не совсем подходит :( Все функции service activation можно дергать по XML-RPC. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted August 11, 2009 · Report post XML-RPC я представляю только в теории. На практике не приходилось сталкиваться, ну кроме платежных терминалов наверно. Спасибо за совет, обращу внимание... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dvolodin Posted August 11, 2009 · Report post XML-RPC я представляю только в теории. На практике не приходилось сталкиваться, ну кроме платежных терминалов наверно. Спасибо за совет, обращу внимание...Там ничего даже в теории представлять не надо. На python оно выглядит в несколько строкhttp://trac.nocproject.org/trac/browser/sa/views.py#L32 (см. get_result) На Perl примерно так же Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
toropovsn Posted August 11, 2009 · Report post Привет всем! А можно мне на почту тоже прогу на перле которая по telnet нужные вещи делает. Спасибо. toropovsn@ya.ru Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
a_andry Posted August 11, 2009 · Report post отправил Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...