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