Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Сообщество системных администраторов Litl-Admin.ru Получаем данные от Cisco с помощью SNMP (PHP)


Ссылка на материал

Как-то мысль пришла в голову о том, что хорошо бы иметь свою систему мониторинга для Cisco, с помощью которой иметь однозначное понятие в каком кабинете подключен тот или иной компьютер к сети. Причем делать это автоматически и, желательно, с WEB-интерфейсом. Радует то, что на наше счастье существует такая вещь, как SNMP — Simple Network Management Protocol. Устройства Cisco его поддерживают весьма неплохо.

Что мы имеем? Коммутатор с 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-ов — подключение разветвителя в виде свитча или хаба;

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



В избранное