Jump to content

Recommended Posts

Posted

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

 

PORT MAC VID

 

 

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

Posted (edited)

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

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

 

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

Edited by terrible
Posted

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

 

Posted

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

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";
        }
}

 

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

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

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

 

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

Edited by hiller
Posted
забираем по 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 свича. :(

Posted (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 by XeonVs
Posted
Можно на почту? 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е.

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

Posted

Получилось!

 

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";

}

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

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

Нет проблем!

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

Posted

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

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

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

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

 

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

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

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

 

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

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

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

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

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

 

Posted

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

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

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

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

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...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.