Torin Posted August 17, 2010 Posted August 17, 2010 Привет всем! Никто не сталкивался с такой ситуацией: смотрю на сабжевом свиче (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 и транковые порты есть, но там все нормально снимается. Вставить ник Quote
s.lobanov Posted August 17, 2010 Posted August 17, 2010 Вот попробуйте: 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 Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 (edited) Друзья, извиняюсь: тут мой косяк. Действительно, все мои действия не работают на прошивке 2.50.B08 но на то она и бета. С прошивкой 2.00.B27, все отлично. Просто при откате на старую прошивку у меня сбросились настрокий vlan'ов , поэтому я получал "фигу". Всем спасибо за внимание! Edited August 17, 2010 by Torin Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 Так и снова я обманул, не работает. Лобанов, работает, спасибо, но мне бы соотвествие порты/маки хотелось , чтобы заробило. Вставить ник Quote
s.lobanov Posted August 17, 2010 Posted August 17, 2010 Похоже не получится это сделать, я сначала забираю список вланов(тоже по snmp), потом циклом прохожусь по всем вланам, таким образом получаю полную таблицу мак-адресов. Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 не понимаю, ведь на других dlink'ах работает это все. мне кажется дело в прошивке, Вставить ник Quote
Mikca Posted August 17, 2010 Posted August 17, 2010 На 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; } Код кривой, собственно как и сами длинки, но работает:) Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 мое, и тоже работает. кроме одного этого 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 ); попробую сегодня самую последнюю бету поставить. Вставить ник Quote
Mikca Posted August 17, 2010 Posted August 17, 2010 (edited) snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2.1.2.$Vlan попробуй Выдаст все маки в этом влане и номер порта соответственно Edited August 17, 2010 by Mikca Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 Придется наверное, через этот оид все и делать (1.3.6.1.2.1.17.7.1.2.2.1.2.$Vlan ). Но мне принципиально интересно, что за полтергейст такой! Вставить ник Quote
s.lobanov Posted August 17, 2010 Posted August 17, 2010 Да не полтергейтс это, в пределах одного вендора могут быть весомые различия в реализации snmp-агента. Вон например, у Cisco ME3400 некоторые MIBы просто не реализованы, хотя функционал соответствующий есть. Вставить ник Quote
Torin Posted August 17, 2010 Author Posted August 17, 2010 Так это же rfc! Оно должно быть. На фига тогда вообще придумывать стандарты!? Кстати переделал процедуру под 1.3.6.1.2.1.17.7.1.2.2.21 и напоролся на то , что Dlink Des-1228 вообще данных не дает. Плюс, смею напомнить, что я сказал, что у меня два коммутатора Des3028 и на одном все дает посмотреть. Хотя опять таки хардваре вершен разный. Вставить ник Quote
Mikca Posted August 17, 2010 Posted August 17, 2010 Dlink и RFC существуют паралельно, и друг другу не мешают. Вставить ник Quote
SokolovS Posted August 17, 2010 Posted August 17, 2010 (edited) Так это snmpwalk -v2c -c public <ip> 1.3.6.1.2.1.17.7.1.2.2 Выдаст все маки во всех VLANах и все статусы. А дальше по OID можно разобрать MAC и VLAN Проверил на 3028 все отрабатвает. Edited August 17, 2010 by SokolovS Вставить ник Quote
s.lobanov Posted August 17, 2010 Posted August 17, 2010 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 все отрабатвает. Да понятно, почему топикстартер так не хочет, у него есть функция, которая работает, а тут придётся делать либо ветвление(в зависимости от оборудования), либо писать вторую функцию, либо делать на классах, короче лишняя работа. Вставить ник Quote
SokolovS Posted August 18, 2010 Posted August 18, 2010 Так а вариантов то немного, я у себя реализовывал. Либо BRIDGE-MIB, снимаются все маки во всех вланах на всех портах. Номер влана естественно неизвестен, обычно на самых дешевых свичах уровня доступа. Либо QBRIDGE-MIB, это как раз предыдущий пост, все тоже самое только с VLAN. Либо цисковский изврат BRIDGE-MIB + специфичный community, например чтобы снять маки с VLAN:10 community должен быть например public@10. Отдельным oid-ом дергается список вланов. Вобщем тут все печально. Вобщем то писать нужно не классы а разбить свичи по этим группам. Вставить ник Quote
s.lobanov Posted August 18, 2010 Posted August 18, 2010 Так а вариантов то немного, я у себя реализовывал.Либо 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, но особо-то и нет производственной необходимости её получть) Вставить ник Quote
Torin Posted August 19, 2010 Author Posted August 19, 2010 (edited) 2SokolovS: у тебя с 3028 нормально снимается .1.3.6.1.2.1.17.4.3.1.2 ? И какая прошивка и хардваре вершен на твоем 3028? У меня щас загвоздка только в одном свиче. Из-за него одного писать дополнительный код не хочу. А на циске вообще забил про идею с попощью snmp брать таблицу коммутации. Делаю это через телнет(Net::Telnet). Гораздо проще получается. У меня две группы - "просто свичи" и "циски". Для "просто свичей" - snmp, для "цисок" - telnet. Edited August 19, 2010 by Torin Вставить ник 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.