Jump to content
Калькуляторы

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 и транковые порты есть, но там все нормально снимается.

 

Share this post


Link to post
Share on other sites

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

 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

Share this post


Link to post
Share on other sites

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

Edited by Torin

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

На 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;
        }

 

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

Share this post


Link to post
Share on other sites

мое, и тоже работает. кроме одного этого 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 );

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

Share this post


Link to post
Share on other sites

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

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

Edited by Mikca

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Так это

snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2

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

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

Edited by SokolovS

Share this post


Link to post
Share on other sites
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 все отрабатвает.

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

 

 

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites
Так а вариантов то немного, я у себя реализовывал.

Либо 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, но особо-то и нет производственной необходимости её получть)

Share this post


Link to post
Share on other sites

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

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

Edited by Torin

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this