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

Dlink DES-3028 SNMP не могу получить таблицу mac-адресов полностью.

Привет всем!

Никто не сталкивался с такой ситуацией: смотрю на сабжевом свиче (Hardware Version A1) таблицу с mac-адресами

snmpwalk -c public -v1 -Cc <ip address> .1.3.6.1.2.1.17.4.3.1.2

и оно мне выдает только маленькую часть данных , и только со входящего порта , и только из менеджмент vlan'а. Причем даже из менеджмент vlan'а только часть. Подумал на прошивку - была 2.50.B08, решил вернутся на предыдущую - 2.00.B27 , вроде как самая стабильная, всеравно таже ситуация. Решил, что может быть, это вообще проблема Dlink свичей всех. Стал смотреть другие коммутаторы: есть Dlink Des1228 (Firmware Version 1.11.B05) и новый Dlink Des3028( Firmware Version Build 1.00-B32, Hardware Version 1A1G ); с обоих коммутаторов все данные смнимаются замечательно. ЧЯДНТ? Может дело в том, что у меня на сабжевом коммутаторе виланы и транки, и он от меня ждет что-то в стиле cisco snmpwalk -c public@<vlan> -v1 -Cc <ip address> .1.3.6.1.2.1.17.4.3.1.2?

Хотя на des-1228 тоже юзаю 802.1q и транковые порты есть, но там все нормально снимается.

 

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


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

Вот попробуйте:

 1.3.6.1.2.1.17.7.1.2.2.1.2.$vlan");//соответствие mac - port для конкретного vlan
1.3.6.1.2.1.17.7.1.2.2.1.3.$vlan");//соответствие mac - status для конкретного vlan

 

работает на DLink DGS 3627G

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


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

Друзья, извиняюсь: тут мой косяк. Действительно, все мои действия не работают на прошивке 2.50.B08 но на то она и бета. С прошивкой 2.00.B27, все отлично. Просто при откате на старую прошивку у меня сбросились настрокий vlan'ов , поэтому я получал "фигу". Всем спасибо за внимание!

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

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


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

Так и снова я обманул, не работает. Лобанов, работает, спасибо, но мне бы соотвествие порты/маки хотелось , чтобы заробило.

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


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

Похоже не получится это сделать, я сначала забираю список вланов(тоже по snmp), потом циклом прохожусь по всем вланам, таким образом получаю полную таблицу мак-адресов.

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


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

не понимаю, ведь на других dlink'ах работает это все. мне кажется дело в прошивке,

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


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

На 3026 делал так:

        $MacTableSrc = snmp2_real_walk($ip, $snmp_community, "1.3.6.1.2.1.17.7.1.2.2.1.2", $snmp_timeout, $snmp_retries);
        $str_to_rpl = "SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.";

        foreach ($MacTableSrc as $i => $value)
        {
            $dmac = str_replace($str_to_rpl, "", $i);
            $vlan = strtok($dmac, ".");
            $dmac = strstr($dmac, ".");
            $dmac = str_replace(".", " ", $dmac);
            $dmac = ltrim($dmac);
            $dmac = str_replace(" ", ".", $dmac);
            $port = substr($MacTableSrc[$i],9);
        $str_exp = explode(".", $dmac);
        $part_mac = '';
        foreach($str_exp as $in => $val)
            {
            $part_m = dechex($val);
            if (strlen($part_m) == 1)
                {
            $part_m = "0". $part_m;
            }
                $part_mac .= $part_m;
            }
        $MacTable[$port] = $part_mac;
        }

 

Код кривой, собственно как и сами длинки, но работает:)

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


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

мое, и тоже работает. кроме одного этого dlink'a.

use Net::SNMP;

sub getsubtree                                                                                                                                          
        {                                                                                                                                                    
           my ( $start_oid ) = @_;                                                                                                                           
           my @array;                                                                                                                                        
           my $current_oid = $start_oid;                                                                                                                     
           my $i=0;                                                                                                                                          
           while ( (my $response = $session->get_next_request($current_oid)) and ($current_oid =~ /^$start_oid.*/) )                                         
             {                                                                                                                                               
                while ( my ( $oid, $val ) = each( %$response ) )                                                                                             
                  {                                                                                                                                          
                      $array[$i] = $val."VAL".$oid;                                                                                                          
                      $i++;                                                                                                                                  
                      $current_oid = $oid;                                                                                                                   
                  }                                                                                                                                          
             }                                                                                                                                               
           pop( @array);                                                                                                                                     
           return  @array;                                                                                                                                   
         }

$oid = ".1.3.6.1.2.1.17.4.3.1.2";                                                                                                     
@arr = getsubtree( $oid );

попробую сегодня самую последнюю бету поставить.

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


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

snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2.1.2.$Vlan попробуй

Выдаст все маки в этом влане и номер порта соответственно

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

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


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

Придется наверное, через этот оид все и делать (1.3.6.1.2.1.17.7.1.2.2.1.2.$Vlan ). Но мне принципиально интересно, что за полтергейст такой!

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


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

Да не полтергейтс это, в пределах одного вендора могут быть весомые различия в реализации snmp-агента. Вон например, у Cisco ME3400 некоторые MIBы просто не реализованы, хотя функционал соответствующий есть.

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


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

Так это же rfc! Оно должно быть. На фига тогда вообще придумывать стандарты!? Кстати переделал процедуру под 1.3.6.1.2.1.17.7.1.2.2.21 и напоролся на то , что Dlink Des-1228 вообще данных не дает. Плюс, смею напомнить, что я сказал, что у меня два коммутатора Des3028 и на одном все дает посмотреть. Хотя опять таки хардваре вершен разный.

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


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

Dlink и RFC существуют паралельно, и друг другу не мешают.

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


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

Так это

snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2

Выдаст все маки во всех VLANах и все статусы. А дальше по OID можно разобрать MAC и VLAN

Проверил на 3028 все отрабатвает.

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

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


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

Dlink и RFC существуют паралельно, и друг другу не мешают.

Я бы поспорил, по крайней мере в отношении SNMP у dlink'а намного больше реализовано "стандартных" MIB-ов, сравнивая код классов под различное оборудование это видно невооружённым взглядом. Сравниваю с cisco, huawei и китайским оемом(L2 свитчи) с различными наклейками.

 

Так это

snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2

Выдаст все маки во всех VLANах и все статусы. А дальше по OID можно разобрать MAC и VLAN

Проверил на 3028 все отрабатвает.

Да понятно, почему топикстартер так не хочет, у него есть функция, которая работает, а тут придётся делать либо ветвление(в зависимости от оборудования), либо писать вторую функцию, либо делать на классах, короче лишняя работа.

 

 

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


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

Так а вариантов то немного, я у себя реализовывал.

Либо BRIDGE-MIB, снимаются все маки во всех вланах на всех портах. Номер влана естественно неизвестен, обычно на самых дешевых свичах уровня доступа.

Либо QBRIDGE-MIB, это как раз предыдущий пост, все тоже самое только с VLAN.

Либо цисковский изврат BRIDGE-MIB + специфичный community, например чтобы снять маки с VLAN:10 community должен быть например public@10. Отдельным oid-ом дергается список вланов. Вобщем тут все печально.

 

Вобщем то писать нужно не классы а разбить свичи по этим группам.

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


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

Так а вариантов то немного, я у себя реализовывал.

Либо BRIDGE-MIB, снимаются все маки во всех вланах на всех портах. Номер влана естественно неизвестен, обычно на самых дешевых свичах уровня доступа.

Либо QBRIDGE-MIB, это как раз предыдущий пост, все тоже самое только с VLAN.

Либо цисковский изврат BRIDGE-MIB + специфичный community, например чтобы снять маки с VLAN:10 community должен быть например public@10. Отдельным oid-ом дергается список вланов. Вобщем тут все печально.

 

Вобщем то писать нужно не классы а разбить свичи по этим группам.

У коммутаторов Quidway *300 ещё сделано по-своему

1.3.6.1.4.1.2011.5.25.42.2.1.2.1 - статическая mac-таблица

1.3.6.1.4.1.2011.5.25.42.2.1.3.1 - "динамическая" мак-таблица

 

Про циска - за то везде одинаково работает этот костыль(единственное, были у меня какие-то проблемы снятия мак-таблицы с c7600, но особо-то и нет производственной необходимости её получть)

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


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

2SokolovS: у тебя с 3028 нормально снимается .1.3.6.1.2.1.17.4.3.1.2 ? И какая прошивка и хардваре вершен на твоем 3028?

У меня щас загвоздка только в одном свиче. Из-за него одного писать дополнительный код не хочу. А на циске вообще забил про идею с попощью snmp брать таблицу коммутации. Делаю это через телнет(Net::Telnet). Гораздо проще получается. У меня две группы - "просто свичи" и "циски". Для "просто свичей" - snmp, для "цисок" - telnet.

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

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


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

Join the conversation

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

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

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

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

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

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

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