аукцион / FPR / donate / услуги / RSS / распечатать / вход 
Мой мир
Вконтакте
Одноклассники

[10 февраля 2021 | 12 февраля 2021 | 16 февраля 2021]

Cisco SNMP получение MAC-адресов на интерфейсе роутера

Для получения списка MAC-адресов на том или ином интерфейсе роутера Cisco можно зайти на роутер и дать команду show arp. В результате нам будут показаны все адреса со всех интерфейсов роутера. А если взять случай с сетью в которой имеется около полусотни роутеров, да ещё вспомнить, что в каждой из сетей пара сотен компьютеров. А ещё в некоторых сетях по три или десять VLAN. Вот тогда ручная задача будет крайне затруднительна. И нам на помощь приходит Python. Раньше нечто аналогичное я делал с использованием библиотеки pexpect, с помощью которой я подключался по SSH к каждому роутеру и потом анализировал полученные данные. Но с использованием SNMP на Cisco и библиотеки pysnmp можно одним запросом получить список IP-адресов и MAC-адресов на интересующих интерфейсах.

Для запроса используется OID: 1.3.6.1.2.1.4.22.1.2.N, где N — это номер интерфейса. Конечно, можно взять уровень выше и запросить MAC со всех интерфейсов: 1.3.6.1.2.1.4.22.1.2. Я не буду публиковать огромную портянку, которая опрашивает кучу устройств используя данные со SQL-сервера, иначе статья займёт катастрофический объём и ограничусь выводом заранее прописанного IP-адреса роутера. А дальше вы подправите под свои нужды.

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#project: orcinus.ru

from pysnmp.entity.rfc3413.oneliner import cmdgen

author = 'Kurilko Ivan'
version = '1.0'

# Адрес источника
address = 'IP роутера'
# Комьюнити железяки
community = 'public'

# Поехали описания OID
ip_int_mac = '1.3.6.1.2.1.4.22.1.2' # MAC-адреса на интерфейсе


def get_smtp(getvar):
   # Создание обьекта для запросов
   ComGeneretion = cmdgen.CommandGenerator()
   # Получаем список ответов на запрос
   errIndication, errStatus, errIndex, Data = ComGeneretion.nextCmd(cmdgen.CommunityData(community),cmdgen.UdpTransportTarget((address, 161)),getvar)

   if errIndication:
      return 1, errIndication
   else:
      if errStatus:
         return 2, errStatus.prettyPrint()
      else:
         return 0, Data

err, data = get_smtp(ip_int_mac)

if err > 0:
   print(data)
   sys.exit()
else:
   for dataRow in data:
      for name, val in dataRow:
         names = name.prettyPrint()
         names = names.replace('SNMPv2-SMI::mib-2.4.22.1.2.', '')
         int_n = names[0:names.find('.')]
         names = names[names.find('.')+1:len(names)+1]
         vals = val.prettyPrint()
         vals = vals[2:6]+'.'+vals[6:10]+'.'+vals[10:14]
         print('Interface: %s IP: %s MAC: %s' % (int_n, names, vals))

Эта программа выведет номер интерфейса, IP-адресс и MAC-адресс устройств подключенных к маршрутизатору. Ещё раз напомню как включить SNMP на чтение для вашего роутера.

ip access-list standard SNMP_ACCESS_RO
 permit 192.168.192.21
 permit 192.168.192.22

snmp-server community public RO SNMP_ACCESS_RO
snmp-server ifindex persist

Результат работы скрипта:

Cisco SNMP.

Для установки пакета pysnmp под Windows необходимо запустить вот такие команды:

python.exe -m pip install --upgrade pip
pip3.exe install pysnmp

Вы можете модифицировать этот скрипт для того, чтобы мониторить подключение и отключение оборудования в сети. Так же эту информацию можно использовать для инвентаризации сетевых устройств. Мне же потребовалось найти одно устройство среди всех филиалов, зная только MAC-адресс устройства.

Тэги: ИТ, Cisco, программирование, Питон

Отредактировано:2021-02-15 12:14:34


Этот сайт использует файлы cookies, чтобы упростить вашу навигацию по сайту, предлагать только интересную информацию и упростить заполнение форм. Я предполагаю, что, если вы продолжаете использовать мой сайт, то вы согласны с использованием мной файлов cookies. Вы в любое время можете удалить и/или запретить их использование изменив настройки своего интернет-браузера.

Сообщайте мне о замеченных ошибках на: web@orcinus.ru. Все пожелания и советы будут учтены при дальнейшем проектировании сайта. Я готов сотрудничать со всеми желающими. В некоторых случаях, мнение автора может не совпадать с мнением автора! Phone: +7-902-924-70-49.

Top.Mail.Ru
Top.Mail.Ru LiveInternet Rambler's Top100 Яндекс.Метрика