- PVSM.RU - https://www.pvsm.ru -
В течении многих лет мы, ввиду специфики работы, постоянно сталкиваемся с необходимостью съема FDB-таблиц (Forwarding DataBase) управляемых коммутаторов с данными о коммутации MAC-адресов абонентов и устройств. За это время мимо нас прошли несколько сотен различных моделей устройств многих производителей, а количество версий их прошивок сложно сосчитать. Накопив опыт – можно им и поделиться.
В данном случае затронем лишь тему съема требуемых данных по SNMP-протоколу.
Заранее отмечу, что мы не лоббируем и не стараемся принизить какого-то вендора или модель. Приведённые для примера модели указаны в информационных целях и были в момент написания статьи под рукой.
Плюсы:
Минусы:
Отдельный момент – подключение по разным протоколам SNMP – v.1 или v.2. Вторая версия более быстра, но некоторые (устаревшие) модели её не поддерживают, либо могут отдать лишь часть данных.
В FDB-таблице коммутатора содержатся записи о том какой MAC-адрес на каком интерфейсе коммутатора находится. Важное уточнение – интерфейсе это не порт. Это МОЖЕТ быть порт, а может быть – номер VLAN или прочий логический объект. А так как нам требуется именно знать номер порта, то, собственно, вся дальнейшая процедура и затевается.
snmpwalk -v2c -c public 192.168.0.1 .1.3.6.1.2.1.17.7.1.4.3.1.1
snmpwalk -v2c -c public 192.168.0.1 .1.3.6.1.4.1.9.9.46.1.3.1.1.2
При этом некоторые модели (FoxGate S6224-S4) могут ругаться и ничего так и не дать:
iso.3.6.1.4.1.9.9.46.1.3.1.1.2 = No Such Object available on this agent at this OID
iso.3.6.1.2.1.17.7.1.4.3.1.1 = No Such Instance currently exists at this OID
snmpwalk -v2c -c public@999 192.168.0.1 .1.3.6.1.2.1.17.1.4.1.2
выдаст соотношение «порт-интерфейс» для VLAN ID: 999
Дело в том, что в некоторые VLAN может быть отдана часть портов, в другие VLAN – другая часть и т.д. И только опросив все VLAN можно сложить общую картину по устройству. Пример по Cisco WS-C3550-48 – записи первого VLAN:
iso.3.6.1.2.1.17.1.4.1.2.1 = INTEGER: 1
iso.3.6.1.2.1.17.1.4.1.2.6 = INTEGER: 6
iso.3.6.1.2.1.17.1.4.1.2.8 = INTEGER: 8
iso.3.6.1.2.1.17.1.4.1.2.9 = INTEGER: 9
iso.3.6.1.2.1.17.1.4.1.2.10 = INTEGER: 10
В него отдано только 5 портов. В данном случае номера интерфейсов совпадают с номерами портов.
snmpwalk -v2c -c public 192.168.0.1 .1.3.6.1.2.1.17.4.3.1
iso.3.6.1.2.1.17.4.3.1.1.0.12.66.164.241.225 = Hex-STRING: 00 0C 42 A4 F1 E1
iso.3.6.1.2.1.17.4.3.1.2.0.12.66.164.241.225 = INTEGER: 25
iso.3.6.1.2.1.17.4.3.1.3.0.12.66.164.241.225 = INTEGER: 3
Возвращаемые данные состоят из трех логических частей — собственно MAC-адрес, номер интерфейса и тип записи, а именно:
1 - other - запись, полученная не одним из перечисленных ниже способов
2 - invalid - неправильная запись, неактивная в данный момент
3 - learned - запись, изученная динамически
4 - self – это MAC-адрес коммутатора
5 - mgmt - запись, созданная статически
Записи отличаются одиннадцатым (в данном примере) разрядом (1, 2, 3) и характеризуют какой именно параметр содержится в значении.
Однако дьявол в деталях — иногда данные возвращаются испорченными
iso.3.6.1.2.1.17.4.3.1.1.40.16.123.134.116.160 = Hex-STRING: 28 10 7B 86 74 A0
iso.3.6.1.2.1.17.4.3.1.1.44.171.37.96.118.116 = STRING: ",<%`vt"
iso.3.6.1.2.1.17.4.3.1.1.48.133.169.66.201.219 = STRING: "0:cBЙЫ"
iso.3.6.1.2.1.17.4.3.1.1.64.97.134.11.180.236 = STRING: "@a┼_м"
iso.3.6.1.2.1.17.4.3.1.1.64.97.134.24.59.113 = Hex-STRING: 40 61 86 18 3B 71
Поэтому не мешает выполнять проверку на валидность MAC-адреса.
А иногда для MAC-адреса может не найтись второй и третьей записи (номер интерфейса и тип записи). SNMP такой SNMP….
snmpwalk -v2c -c public 192.168.0.1 .1.3.6.1.2.1.17.7.1.2
iso.3.6.1.2.1.17.7.1.2.1.1.2.1 = Counter32: 8
iso.3.6.1.2.1.17.7.1.2.1.1.2.888 = Counter32: 1
iso.3.6.1.2.1.17.7.1.2.2.1.2.888.0.12.66.164.241.225 = INTEGER: 25
iso.3.6.1.2.1.17.7.1.2.2.1.2.1.0.21.153.136.45.223 = INTEGER: 2
iso.3.6.1.2.1.17.7.1.2.2.1.2.1.0.33.133.202.27.110 = INTEGER: 1
В начале – поступит информация о количестве записей в каждом из VLAN. К сожалению она иногда не соответствует действительности.
К примеру в FoxGate S6224-S4 показало:
iso.3.6.1.2.1.17.7.1.2.1.1.2.1 = Counter32: 21
iso.3.6.1.2.1.17.7.1.2.1.1.2.888 = Counter32: 114
А в реальности (далее в списке) записей было:
И идут сами записи, которые имеют особую структуру:
iso.3.6.1.2.1.17.7.1.2.2.1.2.888.0.12.66.164.241.225 = INTEGER: 25
С конца:
Ну а интерфейс, как видно из значения, номер 25.
Однако Cisco может и не выдать таблицу по всем OID
iso.3.6.1.2.1.17.7.1.2 = No Such Object available on this agent at this OID
И тогда начинается увлекательное занятие – подключение к каждому VLAN и съем с него таблицы, указанной пунктом выше.
Несмотря на все вышеуказанные «особенности», SNMP-протокол остаётся самым востребованным и удобным методом получения FDB-таблицы. В большинстве случаев нет необходимостей указанных танцев с бубном и обычный годный D-Link, имеющий единственный VLAN, сходу выдаст красивый список с MAC-адресами, и номера портов будут совпадать с интерфейсами, но как знать…
Если статья будет востребована – в следующий раз расскажу особенности съема по Telnet.
Автор: UserSide
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/55446
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/213247/
Нажмите здесь для печати.