Назад | Перейти на главную страницу

Переключатель DELL 6248 и сопоставление портов Mac с использованием SNMP

У меня коммутатор Dell 6248. Я подключаю к нему некоторые из своих серверов и хочу знать, какой сервер подключен к какому порту коммутатора. Я пытаюсь использовать snmpwalk для получения этой информации, но я просто могу получить сопоставление mac / ip моего сервера nic с коммутатора, я все еще не могу понять, к какому порту коммутатора он подключается.

Я пробую инструмент под названием Managed Switch Port Mapping tool, он может показать, какой порт коммутатора подключен к какому nic / ip. Я использую WireShare для получения всех пакетов snmp, но до сих пор не могу найти идентификатор snmp для получения этой информации.

Кто-нибудь знает, как это получить?

Вам нужно немного отслеживать через BRIDGE-MIB и IF-MIB.

(Предостережение: у меня нет вашей конкретной модели коммутатора для тестирования, но это стандартные MIB, так что это должно работать.)

Использовать dot1dTpFdbAddress (.1.3.6.1.2.1.17.4.3.1.1) из BRIDGE-MIB, чтобы найти MAC-адреса (в примере показана одна строка вывода snmpwalk для ясности, вы, вероятно, получите несколько строк):

>snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.4.3.1.1
SNMPv2-SMI::mib-2.17.4.3.1.1.0.20.124.62.198.161 = Hex-STRING: 00 14 7C 3E C6 A1

Возьмите те числа, которые следуют за базовым OID (глядя на пример, я говорю о 0.20.124.62.198.161). Используйте их, чтобы узнать ценность dot1dTpFdbPort (.1.3.6.1.2.1.17.4.3.1.2), также из BRIDGE-MIB:

>snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.4.3.1.2
SNMPv2-SMI::mib-2.17.4.3.1.2.0.20.124.62.198.161 = INTEGER: 794

Возьмите целые значения из dot1dTpFdbPort (794 в примере) и используйте их, чтобы найти значение dot1dBasePortIfIndex (.1.3.6.1.2.1.17.1.4.1.2), опять же из BRIDGE-MIB:

>snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.1.4.1.2
SNMPv2-SMI::mib-2.17.1.4.1.2.794 = INTEGER: 200

Это значение - ваш ifIndex (в примере - 200). Используйте это, чтобы извлечь из ifName (.1.3.6.1.2.1.31.1.1.1.1) из IF-MIB:

>snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.200 = STRING: 4/20

PHP-код, который даст вам то, что вы хотите:

<?php
$_snmp_ip = <ip>;
$_snmp_com = <community>;

$_dot1dTpFdbAddress = snmp2_real_walk($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.4.3.1.1.0");

foreach($_dot1dTpFdbAddress  as $_dot1dTpFdbAddress_key => $_dot1dTpFdbAddress_value)
{
        preg_match("/(\.[\d]*){6}$/i", $_dot1dTpFdbAddress_key, $_dot1dTpFdbAddress_key_unique);
        preg_match("/([0-9A-F ]*){6}$/i", $_dot1dTpFdbAddress_value, $_dot1dTpFdbAddress_value_unique);
        $_dot1dTpFdbPort = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.4.3.1.2".$_dot1dTpFdbAddress_key_unique['0']);

        preg_match("/[\d]*$/i", $_dot1dTpFdbPort, $_dot1dTpFdbPort);
        $_dot1dBasePortIfIndex = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.1.4.1.2.".$_dot1dTpFdbPort['0']);

        preg_match("/[\d]*$/i", $_dot1dBasePortIfIndex, $_dot1dBasePortIfIndex);
        $_ifName = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.31.1.1.1.1.".$_dot1dBasePortIfIndex['0']);

        preg_match("/\"([^\"]*)\"$/i", $_ifName, $_ifName);

        $mac = str_replace(" ", ":", strtolower($_dot1dTpFdbAddress_value_unique['0']));
        $mac = ereg_replace("(^:|:$)","", $mac);
        $_mac[$mac] = $_ifName['1'];
}
print_r($_mac);
?>

Если ваша цель - выяснить, какие хосты к каким портам подключены, почему бы не войти в интерфейс управления коммутатором (веб или cli) и посмотреть таблицу адресов, которая покажет вам, какие MAC-адреса связаны с какими портами.