21.06.2018

PHP получение данных FDB-таблицы по протоколу SNMP

В одной из предыдущих заметок я описывал пример работы на PHP через SNMP-протокол 

В данной заметке я выкладываю пример кода реализованного на PHP для получения таблицы FDB с управляемого оборудования

В отличии от предыдущей заметки ,в данном примере используется объектно-ориентированная модель.

Требования для корректной работы: 

  • PHP 5>=5.4.0
  • установленное расширение php-snmp

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

<?php

// Получение списка МАС с указанием порта коммутатора

$host = '10.0.0.1';

$community = 'public';

$community_write = 'private';

/*

 * Получаем из OID MAC-адрес и номер VLAN

 */

function oid_to_macvlan($oid) {

    $tmp = explode('.', $oid);

    $vlan = intval($tmp[0]);

    unset($tmp[0]);

    foreach ($tmp as $k => $v) {

        $tmp[$k] = str_pad(dechex($v), 2, '0');

    }

    return array($vlan, implode(':', $tmp));

}

// OID в котором хранится номер порта

$oid_macport = '.1.3.6.1.2.1.17.7.1.2.2.1.2';

//Открываем сессию на чтение значений

$snmp_session_read = new snmp(SNMP::VERSION_2C, $host, $community);

//Получаем OID в числовом формате

$snmp_session_read->oid_output_format = SNMP_OID_OUTPUT_NUMERIC;

//Указываем, что получаемые значения будут в "чистом" виде, без указания типа

$snmp_session_read->quick_print = 1;

//Получаем таблицу FDB

$fdb_t = $snmp_session_read->walk($oid_macport);


// Обработка и приведение к понятному виду

$fdb = array();

foreach ($fdb_t as $key => $value) {

    $mac_vlan = str_replace($oid_macport . '.', '', $key);

    list($vlan, $mac) = oid_to_macvlan($mac_vlan);

    $fdb[] = (object) ['mac' => $mac, 'vlan' => $vlan, 'port' => intval($value)];

}

// На выходе получаем массив объектов

//c указание MAC, VLAN и номера порта.

var_dump($fdb);


$snmp_session_read->close();


В случае возникновения вопросов, оставляйте их в комментариях.

 

Комментариев нет:

Отправить комментарий