LINUX.ORG.RU

SNMP, VLAN и немного python

 ,


1

1

Хочу получить с коммутатора информацию по портам, вланам и их взаимоотношениям. Телнет не хочу.

Успешно получаю данные по портам и некоторые данные по вланам. Но пока не получил связь: в каком порту какие вланы. По этой связи нашёл OIDы: https://iphostmonitor.com/mib/oids/Q-BRIDGE-MIB/dot1qVlanStaticEgressPorts.html https://iphostmonitor.com/mib/oids/Q-BRIDGE-MIB/dot1qVlanCurrentEgressPorts.html , правда не очень понял чем они различаются и какой из них надо использовать. И ещё одна неприятность, они возвращают Hex-STRING.

Соответственно, главный вопрос: что делать с этим Hex? Второй: какой из них брать, но это уже не так важно, в крайнем случае можно тупо добавить в описание и то и другое.

И ещё дополнительный вопрос. Питон немного странно получает некоторые данные:

import netsnmp

session = netsnmp.Session(Version = 2, DestHost = '1.2.3.4', Community = 'CommunityName')

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('ifIndex',),
                                             netsnmp.Varbind('ifDescr',))))

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.2',),
                                             netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.3',))))
даёт следующий результат:
('1', 'Ethernet1/0/1', '2', 'Ethernet1/0/2')
('default', 'default', 'vlanname1', 'vlanname1')
При этом раздельное обращение:
print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.2',),)))
print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::enterprises.27514.100.5.1.1.3',),)))
даёт нормальный результат:
('default', 'vlanname1')
('37', '20')
В принципе можно конечно перебирать, но может быть кто нибудь знает что это: баг (чей?) или так было задумано?

И ещё по питону. Он получает не совсем Hex:

print session.getbulk(0, 2, (netsnmp.VarList(netsnmp.Varbind('SNMPv2-SMI::mib-2.17.7.1.4.2.1.4',),)))
возвращает
('\xff\xfa\xf7\xf8\x0cO\xf0', '?JF \x00C\xf0')
Это нужно как то декодировать?

★★★★★

Но пока не получил связь: в каком порту какие вланы.

Кажется, этого нет в стандартных MIB. Надо смотреть вендор специфик, а тут уже кто во что горазд.

AS ★★★★★
()
Ответ на: комментарий от sin_a

по ссылкам: dot1q Vlan Current Egress Ports и dot1q Vlan Static Egress Ports.

А, ну да, наверное.

AS ★★★★★
()

SNMPv2-SMI::mib-2.17.7.1.4.2.1.4 дает битмап на порты в vlan-е

только порядок бит в нем сильно зависит от производителя и модели.

Я встречал 3 варианта:

нормальный порядок ( 0-й бит может не использоваться)

обратный порядок ( 7-й бит - 1-й порт )

hex-порядок: биты 76543210 -> порты 43218765

PS на перле нет таких проблем с snmp:)

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

То есть, таблица где по одной оси порты а по другой вланы и заполненная единицами или нулями? А как с этим обращаться? Не обязательно в питоне, например в обычном шелл, есть утилиты?

sin_a ★★★★★
() автор топика
Ответ на: комментарий от vel

hex-порядок: биты 76543210 -> порты 43218765

Вот у меня наверно именно оно, snmpbulkwalk получает:

SNMPv2-SMI::mib-2.17.7.1.4.2.1.4.0.1 = Hex-STRING: FF FA F7 F8 0C 4F F0

sin_a ★★★★★
() автор топика
Ответ на: комментарий от sin_a

да, для каждого vlan - битмап

В обычном шелле - не очень просто, на перле - список портов конкретного vlan ($val)

my @s = unpack('C*',$val);
for($k=0; $k <= $#s; $k++) {
    for($i=0x80; $i ; $j++,$i >>=1) {
        if($s[$k] & $i) { print $j; }
    }
}

Для почти всех d-link-ов подходит

vel ★★★★★
()
Ответ на: комментарий от vel

Что то я туплю, никогда с этим не имел дела. Как понять, какой у меня случай из трёх описанных? И как узнать порядок бит? Имею дело с q-tech, нашёл qtech private mib но там этого нет, в описаниях обычно просто написано: «посмотрите какой офигенный коммутатор!!!111». Только методом тыка?

И далее, насколько я понял, число преобразуется в бинарное и последовательно проверяется единица на данной позиции или нет?

sin_a ★★★★★
() автор топика
Ответ на: комментарий от sin_a

И далее, насколько я понял, число преобразуется в бинарное и последовательно проверяется единица на данной позиции или нет?

да. Именно так.

Но с питоном я не дружу.

vel ★★★★★
()
Ответ на: комментарий от vel

Да питон, в общем, не имеет значения. Мне в общем логику понять, а преобразования это рутина.

Остаётся только узнать соответствие битов портам. Можно конечно получать значения, преобразовывать и смотреть соответствуют ли реальной картине. Но нет ли способа лучше?

sin_a ★★★★★
() автор топика
Ответ на: комментарий от sin_a

Это нужно сделать 1 раз для конкретной модели.

У тебя нет доступа к конфигурации коммутатора ? Достаточно сравнить 1 влан.

vel ★★★★★
()
Ответ на: комментарий от sin_a

учти, что в этом битмапе используются индексы интерфейсов из IF-MIB::ifIndex, которое могут быть пронумерованы немного по-другому ( особенно если используется стек из нескольких девайсов )

mbrowse в помощь.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.