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