Материал просмотрен 12,402 раз(а)

Как-то мысль пришла в голову о том, что хорошо бы иметь свою систему мониторинга для Cisco, с помощью которой иметь однозначное понятие в каком кабинете подключен тот или иной компьютер к сети. Причем делать это автоматически и, желательно, с WEB-интерфейсом. Радует то, что на наше счастье существует такая вещь, как SNMP – Simple Network Management Protocol. Устройства Cisco его поддерживают весьма неплохо. Учитывая, что в примере мы будем собирать MAC-адреса, нам потребуется библиотека BRIDGE-MIB, которую (как и другие) можно скачать с http://www.cisco.com/public/sw-center/netmgmt/cmtk/mibs.shtml, указав конкретную модель своего устройства.

Что мы имеем? Коммутатор с L3 (Cisco Catalyst 3560G), получаем все MAC-адреса, которые записаны в коммутаторе:

# show mac-address-table

show mac-address-table

show mac-address-table

Те, что с VLAN: All – это внутренние адреса портов. А вот Vlan: 1 – собственно осевшие МАКи. Обращаем внимание на тип: Dynamic и номер порта (Gi0/N). Это нам пригодится.

Далее, я завел виртуальную машину с Apache+PHP, в котором раскомментировал модуль snmp (для Apache2 устанавливается php5-extensions и выбирается модуль snmp).

Пишем скрипт на PHP.

Создаем вот такой скрипт:

Скрипт выборки MAC и портов

Скрипт выборки MAC и портов

Немного поясню его:

Завуалировал я свой IP и имя community.

Функция snmpwalk принимает параметры IP адрес коммутатора, имя комьюнити (см. ниже), и путь OID. Этот путь со сложным сочетанием цифр и точек можно получать из документации к Cisco MIB-файлов, т.е. описание “ветвей дерева”, где можно читать тот или иной параметр.

По пути 1.3.6.1.2.1.17.1.1 у нас лежит массив mac-адресов, а по пути 1.3.6.1.2.1.17.1.2 – соответствующие имена портов.

Обрезаю все лишнее из вывода через substr (так как выводятся тестом Hex STRING: и INTEGER типы данных);

Вывожу попарно вот таком виде:

Вывод скрипта

Вывод скрипта

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

Поэтому лучше сразу пометить все магистральные порты и их не выводить, либо выводить с пометкой.

Настраиваем SNMP Community.

Входим в Cisco устройство:

# conf t
(config)# snmp-server community foo RO

Вместо foo можно указать любое имя для комьюнити, а RO – это ReadOnly, так как с помощью SNMP можно не только читать параметры, но и записывать их. Но нам пока это не нужно.

Теперь то, как я вижу развитие этого проекта:

  1. С определенным интервалом (cron) опрашиваются все Cisco коммутаторы и информация заносится в базу данных.
  2. В базе хранится информация о магистральных портах, о том, какой порт в какой кабинет ведет (по патч-панели проследить, это Const), какой компьютер какой MAC имеет (опрос ARP);
  3. Веб-интерфейсом рисуется карта (план здания) по этажам и у каждого кабинета подписываются включенные компьютеры;
  4. Генерировать репорты в случае:
  • если MAC адрес обнаруживается на другом порту (не магистральном) – переноска на новое место;
  • если обнаруживается новый MAC – несанкционированное подключение;
  • если на одном порту появляется несколько MAC-ов – подключение разветвителя в виде свитча или хаба;

При желании эту тему можно развивать. Кто что думает, полезная вещь?

Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!

Также, подписывайтесь на наш канал в YouTube! Видео выкладываются весьма регулярно и будет здорово увидеть что-то одним из первых!