Jump to content

Recommended Posts

Posted

Привет всем!

Никто не сталкивался с такой ситуацией: смотрю на сабжевом свиче (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 и транковые порты есть, но там все нормально снимается.

 

Posted

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

 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

Posted (edited)

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

Edited by Torin
Posted

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

Posted

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

Posted

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

 

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

Posted

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

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

Posted (edited)

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

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

Edited by Mikca
Posted

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

Posted

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

Posted

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

Posted (edited)

Так это

snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2

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

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

Edited by SokolovS
Posted
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 все отрабатвает.

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

 

 

Posted

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

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

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

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

 

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

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

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

Posted (edited)

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

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

Edited by Torin

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 и с Политикой конфиденциальности.