faq обучение настройка
Текущее время: Ср июл 30, 2025 22:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Чт апр 05, 2007 16:25 
Не в сети

Зарегистрирован: Пн дек 11, 2006 11:46
Сообщений: 432
Откуда: Etherway, Чебоксары
Спасибо за подробную документацию, но немного не понятен следующий момент:

Цитата:
Шаг 2. Назначить эту связку на порт 1:
snmpset -v2c -c private 192.168.0.1 1.3.6.1.4.1.171.11.64.1.2.7.2.1.4.192.168.0.100 x 80000000
80000000 -> Порт 1
8 -> 1000 (двоичный код) -> 1000 1 = порт 1 000 = порт 2 – порт 4


как именно считать этот 80000000?
поподробнее алгоритм, с примером для скажем 5го и 13 порта :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 16:42 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
Порт 5:

00001000 = 08h и дополняем 08000000

Порт 13:

0000000000001000 = 0008h и дополняем 00080000

А вместе 08080000.

Надо поставить 1 в тех разрядах которые соотвествуют номерам портов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт апр 06, 2007 23:18 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
Кто бы написал красивый вариант Perl-кода для генерации кода для строки или массива с номерами портов свитча?

У меня есть. Он работает, то мне не нравится!-(


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 09, 2007 11:13 
Не в сети

Зарегистрирован: Пн дек 11, 2006 11:46
Сообщений: 432
Откуда: Etherway, Чебоксары
Покажи какой есть?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн апр 09, 2007 11:24 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
Камнями не кидать! Самому стыдно!-(

На входе ссылка на массив ($ports), содержащий список портов.
$des35xx->TotalNumOfPort - возвращает количество портов на модели свитча (см. пояснения ниже)

my %ports_list;
map { $ports_list{$_} = 1; } @$ports;

my $bits = $des35xx->TotalNumOfPort + 6;

my $bin_ports;
for ( my $i=1; $i<=$bits; $i++ ) {
if (exists $ports_list{$i}) {
$bin_ports .= '1';
}
else {
$bin_ports .= '0';
}
}

my @binary;
while ($bin_ports =~ s/^(.{8})// ) {
push @binary, '0b' . $1;
}

my $oct_ports = join '', map { pack('C', oct) } @binary;

В свою защиту могу сказать только одно - РАБОТАЕТ!-)

Есть модуль SNMP::Info. Я приписал к нему модуль для DES3550/3526 и потихоньку довожу до ума. Если кому интересно, то в личку...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 18, 2007 11:43 
Не в сети

Зарегистрирован: Пн дек 11, 2006 11:46
Сообщений: 432
Откуда: Etherway, Чебоксары
Кстати в DES3550 назначение связки на определенный порт как-то по другому работает?
например:

snmpset -v2c -c private 192.168.98.15 1.3.6.1.4.1.171.11.64.2.2.7.2.1.4.10.129.26.10 x 80000000
Error in packet.
Reason: wrongLength (The set value has an illegal length from what the agent expects)
Failed object: SNMPv2-SMI::enterprises.171.11.64.2.2.7.2.1.4.10.129.26.10

и что интересно

snmpwalk -v1 -c public 192.168.98.15 1.3.6.1.4.1.171.11.64.2.2.7.2.1.4
SNMPv2-SMI::enterprises.171.11.64.2.2.7.2.1.4.10.129.26.10 = Hex-STRING: FF FF FF FF FF FF C0

просьба прокомментировать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 18, 2007 12:58 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
Естественно портов то у него 50. Соотвественно из разрядов должно быть 50 минимум, т.е. первое большее число кратное 4 = 13.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 18, 2007 18:28 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
Тот скрипт, что выше, это умеет!-)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 26, 2007 01:24 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
Забыл сказать, что приведенный выше скрипт расчитан на работу со свитчами по SNMP через MIB, где требуется:
PortList ::= OCTET STRING(SIZE (0..127))

Если Вы работаете через snmpwalk напрямую с oid'ми, то Вам поможет сформировать список портов следующий скрипт:

#!/usr/bin/perl -w

use strict;

# DES-3550 or DES3526
my $switch = 'DES-3550';

die "Usage: ./ports_hex.pl port1 port2 ...\n"
unless defined $ARGV[0];

my $bin_length = 0;
$bin_length = 56 if $switch eq 'DES-3550';
$bin_length = 32 if $switch eq 'DES-3526';

my %ports;
map { $ports{$_} = 1; } @ARGV;

my $ports_bin;
for ( my $i=1; $i<=$bin_length; $i++ ) {
if (exists $ports{$i}) {
$ports_bin .= '1';
}
else {
$ports_bin .= '0';
}
}

my $ports_hex;
while ($ports_bin =~ s/^(.{8})// ) {
$ports_hex .= sprintf("%02X",
unpack("N", pack("B32", substr("0"x32 . $1, -32))));
}

printf "ports_num: %s\n", join(' ', @ARGV);
printf "ports_hex: %s\n", $ports_hex;

---

Внутри скрипта надо задать для какого свитча Вы формируете список портов (DES-3526 или DES-3550. По умолчанию DES-3550. Для других свитчей можно расширить скрипт. Понятно, что количество бит это количество портов, которое округлено вверх до ближайшего значения, которое кратно восьми).

На входе список портов через пробел. Особых проверок не проводится, т.к. скрипт исключительно для тестовых целей.
На выходе строчка, которую можно отдать snmpwalk.

Например (для DES-3550!!!):

./ports_hex.pl 1
ports_num: 1
ports_hex: 80000000000000

./ports_hex.pl 1 9 17 25
ports_num: 1 9 17 25
ports_hex: 80808080000000

Надеюсь, что кому-нибудь поможет! Если найдете ошибки, пишите...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 08, 2007 21:10 
Не в сети

Зарегистрирован: Вс май 06, 2007 13:19
Сообщений: 4
ahk писал(а):
Код:
my $ports_hex;
while ($ports_bin =~ s/^(.{8})// ) {
  $ports_hex .= sprintf("%02X",
                unpack("N", pack("B32", substr("0"x32 . $1, -32))));
}


Блин, перла уже совсем не помню... :cry:
Может кто-нить подскажет как этот кусок будет выглядить в пхп ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 08, 2007 21:23 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
Это самое противное место. Операции с числами с учетом старших и младших байтов, в зависимости от ОС (не факт, что на 64-х битной ОС будет корректно работать).

Надо смотреть соответствующие преобразования для PHP.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 08, 2007 21:35 
Не в сети

Зарегистрирован: Вс май 06, 2007 13:19
Сообщений: 4
Да я уже посмотрел...блин в пхп нету возможности запаковать c флагом B
Цитата:
B -A bit string (descending bit order inside each byte)

Может быть есть какие-либо другие пути ?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB