В одной из предыдущих заметок я описывал пример работы на 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();
В случае возникновения вопросов, оставляйте их в комментариях.
Комментариев нет:
Отправить комментарий