Ad Widget

Collapse

Как часть OID передать в переменную (макрос)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mordaden
    Junior Member
    • Jan 2024
    • 4

    #1

    Как часть OID передать в переменную (макрос)

    День добрый.
    Раньше были свичи (циски ), которые могли по снмп отдавали мак таблицу по оид 1.3.6.1.2.1.3.1.1.2 (snmpwalk -v2c -c public@vlan ipcatalyst 1.3.6.1.2.1.17.4.3.1.1)
    выдавал мак адреса (пример на картирнке)

    Сейчас появилось новое оборудование (свичи Eltex), данного оид нет. И вот что они предлагают:

    Для того, чтобы получить c коммутатора MAC, номер порта и VLAN хоста нужно смотреть именно таблицу MAC. Для этого используйте следующий OID:

    24хх:snmpwalk -v1 -c public 192.168.50.9 1.3.6.1.2.1.17.7.1.2.2.1.2
    SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.96.99.76.177.230.113 = INTEGER: 24
    SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.102.0.38.185.149.246.211 = INTEGER: 1
    Здесь подчёркнуты MAC-адреса, представленные в десятичной системе, а полужирным выделен номер VLAN. Значение (INTEGER указывает на номер порта.

    Вопрос, как можно часть оида передать в переменную, для дальнейшей обработки.
    Ну т.е. как получить отсюда влан, и мак в dec и посредством пост обработки перевести его в hex?​
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Хочу уточнить правильно ли понимаю - вы получаете набор строк (результат snmpwalk) и хотите из каждой строки дергать определенные подстроки и обрабатывать их далее?
    что хотите в результате получить как значение элемента данных?
    Или хотите несколько элементов данных (например представляющих номер порта) в которых бы отбирались соответствующие маки?
    конечная цель какая?

    Comment

    • mordaden
      Junior Member
      • Jan 2024
      • 4

      #3
      Вообще хотелось бы получить мак таблицу.
      Т.е по запросу 1.3.6.1.2.1.17.7.1.2.2.1.2​ мы ее получаем
      только нужно вывод разобрать..
      тут есть и влан и сам мак и номер порта. Т.е из строки хочется извлечь сразу три переменные.
      Только вот влан и мак они получаются в OID.. и как с этим работать не оч. понимаю.



      Вообще, когда у меня были cisco-коммутаторы, был пхп скрипт который брал мак таблицу со свича -> шел на роутер -> получал соответствие мак-ip -> и делал таблицу в котороой было видно на каком порту свича висел мак и какой у него ip. Пример (dns пишет, если есть запись на сервере dns):
      Click image for larger version

Name:	image.png
Views:	222
Size:	79.5 KB
ID:	477723

      Сейчас думаю либо переписать скрипт, либо что-то через встроенные средства заббикc попробовать (Заббикс 5 версии у меня)..
      Но скрипт не получается пока придумать.. Собственно проблема таже . Там функция walk работает с получаемым значением.. Как вырезать часть оида не знаю..
      Функцию для перевода dec to hex есть.. а Вот как вырезать этот dec mac из oida не знаю .​

      Comment

      • Alex_UUU
        Senior Member
        • Dec 2018
        • 541

        #4
        Т.е. раньше чтобы получить значения надо было обращаться к 2 устройствам. Поэтому резонно, что все делалось внешним скриптом.
        Сейчас, насколко понял, все необходимые значения передаются по одному запросу?
        Если так, то все очень просто: Элемнт данных получил значения (все выщшенаписанные строки, потом в предобработке Делаете прреобразования удобным способом.
        Можно джава скриптом, в котором либо бежать по строчкам, парсить, делать необходимые изменения, можно сначала регекспом сформировать столбцы, загнать все в json и потом работать с ним т.д и т.п.

        Comment

        • mordaden
          Junior Member
          • Jan 2024
          • 4

          #5
          Мне не понятно Как из оида вытащить нужную часть.. Как для этого создать макрос?
          Вот у нас есть элемент данных через запрос снмп по оид 1.3.6.1.2.1.17.7.1.2.2.1.2

          Вывод у нас такой
          SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.96.99.76.177.230.113 = INTEGER: 24​
          стандартным макросом {#SNMPINDEX} мы получим 1.96.99.76.177.230.113​​
          {#SNMPVALUE} мы получим 24
          Как мне получаемое значение макроса #SNMPINDEX Разбить на два макроса {#vlan} в (данном примере это 1. ) и {#MAC} в данном примере это 96.99.76.177.230.113

          Comment

          • mordaden
            Junior Member
            • Jan 2024
            • 4

            #6
            >Сейчас, насколко понял, все необходимые значения передаются по одному запросу?
            Нет, соответствие мак - ip не передаются. Для этого все равно надо идти на Роутер.

            Comment

            • DSV12
              Senior Member
              Zabbix Certified Specialist
              • Nov 2018
              • 156

              #7

              Originally posted by mordaden
              Вообще хотелось бы получить мак таблицу.
              Т.е по запросу 1.3.6.1.2.1.17.7.1.2.2.1.2​ мы ее получаем
              только нужно вывод разобрать..
              тут есть и влан и сам мак и номер порта. Т.е из строки хочется извлечь сразу три переменные.
              Только вот влан и мак они получаются в OID.. и как с этим работать не оч. понимаю.



              Вообще, когда у меня были cisco-коммутаторы, был пхп скрипт который брал мак таблицу со свича -> шел на роутер -> получал соответствие мак-ip -> и делал таблицу в котороой было видно на каком порту свича висел мак и какой у него ip. Пример (dns пишет, если есть запись на сервере dns):
              Ой, а зачем так сложно? У меня подобный самописный скрипт работает уже лет 15 - для коммутаторов, которые поддерживают BRIDGE-MIB - вся fdb таблица (MAC <-> порт) выдаётся по запросу BRIDGE-MIB::dot1dTpFdbPort. Если надо найти на каком порту обнаружен конкретный MAC, нужно проиндексировать запрос значением MAC-а (в десятичном виде), как-то так (реальный пример MAC):

              # snmpwalk -c public -v 2c -On 192.168.1.1 BRIDGE-MIB::dot1dTpFdbPort.216.94.211.48.111.242 <- красным выделен MAC
              .1.3.6.1.2.1.17.4.3.1.2.216.94.211.48.111.242 = INTEGER: 9 <- порт


              Eltex-и 24xx BRIDGE-MIB не поддерживают, но поддерживают Q-BRIDGE-MIB. Здесь я действую в два этапа:

              1. Сначала вытаскиваю все VLAN_ID: Q-BRIDGE-MIB::dot1qVlanFdbId
              2. Циклом по всем найденным VLAN_id достаю их fdb: Q-BRIDGE-MIB::dot1qTpFdbPort.VLAN_id

              Если нужен конкретный MAC, точно так же индексом в десятичной форме добавляете после VLAN_id:

              # snmpwalk -c public -v 2c -On 192.168.1.2 Q-BRIDGE-MIB::dot1qTpFdbPort.22.0.38.24.214.127.246 <--- VLAN_ID=22, MAC=0.38.24.214.127.246
              .1.3.6.1.2.1.17.7.1.2.2.1.2.1.0.38.24.214.127.246 = INTEGER: 24 <- порт


              Вообще-то для полной строгости нужно ещё найти соответствие VLAN_ID <-> VLAN (с ходу запрос не вспомню), но у Eltex они совпадают.

              Last edited by DSV12; 25-01-2024, 17:33.

              Comment

              • Kos
                Senior Member
                Zabbix Certified SpecialistZabbix Certified Professional
                • Aug 2015
                • 3404

                #8
                Originally posted by DSV12
                Ой, а зачем так сложно?
                Сергей, там человек хотел не только MAC, но ещё и IP. Собственно, за ARP-таблицей ("получал соответствие мак-ip") он и ходил на маршрутизатор.

                Comment

                • Hamardaban
                  Senior Member
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • May 2019
                  • 2713

                  #9

                  Получив в элемент данных вывод snmpwalk == текст обрабатываем его в припроцессинге JavaScriptом построчно ( как собственно уже и написали) https://www.zabbix.com/documentation...ing/javascript разбирая oid каждой строки на части регулярным выражением с группами.
                  Получите некий массив данных который можно далее как-то обрабатывать в том же is или передавать в зависимые элементы данных
                  это то что касается заббикса.
                  Все делают для таких задачек костыли скриптовые обыкновенные заточенные под конкретные железки. Универсала нет.

                  Comment

                  • DSV12
                    Senior Member
                    Zabbix Certified Specialist
                    • Nov 2018
                    • 156

                    #10
                    Originally posted by Hamardaban
                    Получив в элемент данных вывод snmpwalk == текст обрабатываем его в припроцессинге JavaScriptом построчно ( как собственно уже и написали) https://www.zabbix.com/documentation...ing/javascript разбирая oid каждой строки на части регулярным выражением с группами.
                    Получите некий массив данных который можно далее как-то обрабатывать в том же is или передавать в зависимые элементы данных
                    это то что касается заббикса.
                    Все делают для таких задачек костыли скриптовые обыкновенные заточенные под конкретные железки. Универсала нет.
                    Небольшой оффтоп - универсал, как выяснилось, таки есть: https://www.lantopolog.com/ru - (полу)автоматически строит карту сети, прекрасно ищет по топологии по имени/MAC/IP/VLAN, умеет экспортировать карту в html/php. Отлично заточена для работы с сетевым оборудованием (общается с ним чисто по SNMP). Категорически рекомендую, для сетевых разборок - самое то.

                    Из недостатков - довольно долго строит начальную картинку, на моих ~350 коммутаторах это длится где-то часа полтора-два. Изменения топологии в динамике не отслеживает (в отличие, скажем, от HPE/Aruba IMC, которая строит карту полностью автоматически, отслеживая динамику), добавление нового коммутатора/перестройка части схемы инициируется вручную. На редко меняющейся топологии вполне терпимо.

                    Comment

                    • Hamardaban
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • May 2019
                      • 2713

                      #11
                      О! Интересно - попробуем’с! Спасибо

                      Comment

                      Working...