faq обучение настройка
Текущее время: Пт авг 01, 2025 00:30

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Кто поможет кодом? snmp fdb
СообщениеДобавлено: Ср мар 10, 2010 20:47 
Не в сети

Зарегистрирован: Чт окт 26, 2006 19:05
Сообщений: 41
Откуда: SPB
Кто поможет кодом или примером на php. че-го то допетрить не могу как грамотнее отпарсить..

задача: известен порт - требуется вывести находяшие на нем маки

для этого пользуюсь советом
Код:
Если нужно считать FDB во всех VLAN, то как указано в документе нужно использовать, например:
Код:
snmpwalk -v2c -c public 192.168.0.1 1.3.6.1.2.1.17.7.1.2.2.1.2
Пример возвращаемого значения:

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.0.15.61.132.159.255 = INTEGER: 0
SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.0.192.159.134.194.92 = INTEGER: 1
SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.2.0.21.242.169.11.194 = INTEGER: 23

1, 2 -> Номера VLAN-ов

0, 1, 23 -> Номера портов (номер порта 0 означает, что это MAC-адрес коммутатора)

0.21.242.169.11.194 (Десятичное) -> 00-15-F2-A9-0B-C2 (Шестнадцатеричное) -> MAC-адрес

Через snmprealwalk содержимое fdb получается прекрасно, а вот как дальше грамотнее разбить на пары <мак> - <port> идей нету((


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

Зарегистрирован: Вс дек 21, 2008 18:53
Сообщений: 1308
Код:
<?
$dot1dTpFdbAddress=@snmpwalkoid('100.0.3.10','public',".1.3.6.1.2.1.17.7.1.2.2.1.2"); // Таблица коммутации для всех vlan
$dot1qTpVlanStaticName=@snmpwalkoid('100.0.3.10','public',".1.3.6.1.2.1.17.7.1.4.3.1.1"); // Список названий vlan
asort($dot1dTpFdbAddress);
reset($dot1dTpFdbAddress);
for ($q=0;$q<count($dot1dTpFdbAddress);$q++)
  {
  $vlan_mac=key($dot1dTpFdbAddress);
  $vlan_mac=str_ireplace('.iso.3.6.1.2.1.17.7.1.2.2.1.2.','',$vlan_mac);
  $vlan_mac_arr=explode('.',$vlan_mac);
  $mac="";
  for ($m=1;$m<7;$m++)
    {
    $mactmp=dechex($vlan_mac_arr[$m]);
    if (strlen($mactmp)==1) $mactmp="0".$mactmp;
    $mac.=$mactmp;
    if ($m<6) $mac.=":";
    }
  $vid=$vlan_mac_arr[0];
  $vlan_name=$dot1qTpVlanStaticName[".iso.3.6.1.2.1.17.7.1.4.3.1.1.".$vid];
  $port=$dot1dTpFdbAddress[key($dot1dTpFdbAddress)];
  $vlan_name=str_ireplace('"',"",$vlan_name);
  echo 'Port '.$port.': '.$mac.' ('.$vlan_name.')<br>';
  next($dot1dTpFdbAddress);
  }
?>


Код:
Port 0: 00:1e:58:b5:88:53 (default)
Port 23: 00:17:31:84:c1:2a (default)

_________________
D-Link Switches: Tips & Tricks


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

Зарегистрирован: Чт окт 26, 2006 19:05
Сообщений: 41
Откуда: SPB
о! спасибо


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

Зарегистрирован: Вс дек 21, 2008 18:53
Сообщений: 1308
Конечно, можно сделать более красиво и правильно, но надо ли?:)

_________________
D-Link Switches: Tips & Tricks


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

Зарегистрирован: Чт окт 26, 2006 19:05
Сообщений: 41
Откуда: SPB
хотя не. не заработало (
Port '.INTEGER: 0.': '.11:07:01:02:02:01.' ('..')
Port '.INTEGER: 24.': '.11:07:01:02:02:01.' ('..')
Port '.INTEGER: 25.': '.11:07:01:02:02:01.' ('..')

у вас версия по какая?


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

Зарегистрирован: Вс дек 21, 2008 18:53
Сообщений: 1308
А-а-а... Никсы? :)
snmp_set_quick_print(1); в начало кода, может спасет. Мне пока не на чем тестить, к сожалению.

_________________
D-Link Switches: Tips & Tricks


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 11, 2010 00:12 
Не в сети

Зарегистрирован: Чт окт 26, 2006 19:05
Сообщений: 41
Откуда: SPB
Не) это не спасет)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 11, 2010 08:04 
Не в сети

Зарегистрирован: Ср ноя 09, 2005 14:26
Сообщений: 808
Откуда: Alma-Ata
Код:
snmpwalk -v2c -c public 100.56.13.39 1.3.6.1.2.1.17.7.1.2.2.1.2 > 000
cut 000 -d "." -f 9 | mawk '{{s1=$1}{printf ("(%u)\n", s1)}}' > vlan
cut 000 -d " " -f 4 | mawk '{{s1=$1}{printf ("Port %2u\n", s1)}}'> ports
cut 000 -d "." -f 10-15 | cut -d " " -f 1 > mac0
cut mac0 -d "." -f 1 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m1
cut mac0 -d "." -f 2 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m2
cut mac0 -d "." -f 3 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m3
cut mac0 -d "." -f 4 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m4
cut mac0 -d "." -f 5 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m5
cut mac0 -d "." -f 6 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m6
paste -d "\0" m1 m2 > m12
paste -d "\0" m3 m4 > m34
paste -d "\0" m5 m6 > m56
paste -d "." m12 m34 m56 > mac
paste ports mac vlan | sort --sort=numeric -n
rm m[1-6]
rm m[1-6][1-6]
rm ports
rm vlan
rm mac
rm mac0
rm 000

Выведет в таком виде:
Код:
Port  0 0017.9a05.3d1c  (5)                                 
Port 10 0013.204d.4826  (82)                               
Port 12 0030.ab12.b8bc  (5)                                 
Port 15 0024.8cb1.1c46  (82)                               
Port 16 00a0.d2ac.41e0  (82)                               
Port 19 0002.b399.7004  (89)                               
Port 19 0017.9a08.23d2  (5)                                 
Port 19 0017.9a08.663c  (89)                               
Port 19 0017.9a08.6823  (5)                                 
Port 19 0019.5b69.7e64  (89)                               
Port 19 001c.c020.08b5  (82)                               
...

Такое подойдет?

_________________
не важно, из какого места растут золотые руки


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 11, 2010 10:36 
Не в сети

Зарегистрирован: Чт окт 26, 2006 19:05
Сообщений: 41
Откуда: SPB
да я уже сам набросал )


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

Зарегистрирован: Вт май 26, 2009 15:49
Сообщений: 10
Denis Samsonov писал(а):
да я уже сам набросал )

не поделишся воянием своим?


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

Зарегистрирован: Ср окт 15, 2008 13:44
Сообщений: 131
Откуда: Тольятти
http://nnmn.pastebin.com/f47e1c161 - вот мой вариант на баше


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 18, 2010 14:25 
Не в сети

Зарегистрирован: Ср ноя 09, 2005 14:26
Сообщений: 808
Откуда: Alma-Ata
А я свой усовершенствовал. Теперь ему можно скормить список IP-адресов, и он все маки выплюнет в один итоговый файл.
Скрипт:
Код:
#! /bin/bash

# Имя файла с IP-адресами - текстовый файл - первая строка игнорируется
# далее - один IP-адрес - одна строка. Последняя строка тоже пустая.
IPADDR=./ip.txt

# Обнуляю файлы списка файлов
>Out.txt
# Построчно читаю файл с IP-адресами - ip.txt в текущем каталоге
for x in $IPADDR$(awk 'BEGIN{FS=":"}{print $1}' < "$IPADDR" )
do
    if [ $x == $IPADDR ]
# Игнорируем первую строку
    then continue;
    fi
    snmpwalk -v2c -c public $x 1.3.6.1.2.1.17.7.1.2.2.1.2 > 000
    cut 000 -d "." -f 9 | mawk '{{s1=$1}{printf ("(%u)\n", s1)}}' > vlan
    cut 000 -d " " -f 4 | mawk -v xip=$x '{{s1=$1}{printf ("%15s Port %2u\n", xip, s1)}}'> ports
    cut 000 -d "." -f 10-15 | cut -d " " -f 1 > mac0
    cut mac0 -d "." -f 1 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m1
    cut mac0 -d "." -f 2 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m2
    cut mac0 -d "." -f 3 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m3
    cut mac0 -d "." -f 4 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m4
    cut mac0 -d "." -f 5 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m5
    cut mac0 -d "." -f 6 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m6
    paste -d "\0" m1 m2 > m12
    paste -d "\0" m3 m4 > m34
    paste -d "\0" m5 m6 > m56
    paste -d "." m12 m34 m56 > mac
    paste ports mac vlan | sort --sort=numeric -n >> Out.txt
    rm m[1-6]
    rm m[1-6][1-6]
    rm ports
    rm vlan
    rm mac
    rm mac0
    rm 000
done

exit 0



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

100.56.13.16
100.56.33.13
100.56.234.8


В итоге получим текстовый файл:
Код:
   100.56.13.16 Port  0 0017.9a05.3d1c  (5)                                 
   100.56.13.16 Port 10 0013.204d.4826  (82)                               
   100.56.13.16 Port 12 0030.ab12.b8bc  (5)                                 
   100.56.13.16 Port 15 0024.8cb1.1c46  (82)                               
   100.56.13.16 Port 16 00a0.d2ac.41e0  (82)                               
   100.56.13.16 Port 19 0002.b399.7004  (89)                               
   100.56.13.16 Port 19 0017.9a08.23d2  (5)                                 
   100.56.13.16 Port 19 0017.9a08.663c  (89)                               
   100.56.13.16 Port 19 0017.9a08.6823  (5)                                 
   100.56.13.16 Port 19 0019.5b69.7e64  (89)                               
   100.56.13.16 Port 19 001c.c020.08b5  (82)                               
...
...
   100.56.33.13 Port  0 0022.b067.47c4  (5)
...
...

Чем удобно, так это тем, что
а) MAC-адрес в цискином формате (не надо лишних манипуляций производить, просто copy-past)
б) можно найти, к какого клиентского порта валится данный мак-адрес (cat + grep)

_________________
не важно, из какого места растут золотые руки


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

Зарегистрирован: Вт авг 25, 2009 14:21
Сообщений: 25
GreatFoolDad писал(а):
Код:
    cut 000 -d "." -f 10-15 | cut -d " " -f 1 > mac0
    cut mac0 -d "." -f 1 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m1
    cut mac0 -d "." -f 2 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m2
    cut mac0 -d "." -f 3 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m3
    cut mac0 -d "." -f 4 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m4
    cut mac0 -d "." -f 5 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m5
    cut mac0 -d "." -f 6 | mawk '{{s1=$1}{printf ("%02x\n", s1)}}' > m6
    paste -d "\0" m1 m2 > m12
    paste -d "\0" m3 m4 > m34
    paste -d "\0" m5 m6 > m56
    paste -d "." m12 m34 m56 > mac


Можно ещё проще
Код:
    mac0=`cut 000 -d "." -f 10-15 | cut -d " " -f 1`
    mac=`echo "$mac0" | tr '.' ' ' | mawk '{printf ("%02x%02x.%02x%02x.%02x%02x\n", $1, $2, $3, $4, $5, $6)}'`


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


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

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