LINUX.ORG.RU
решено ФорумAdmin

bash мак адрес с десятичного в шестнадцатеричный

 , , ,


0

1

хочу распарсить башем снмп вывод таблицы мак-влан-порт дэлинка, но не хватает совсем айкью. snmpwalk -v2c -c public 192.23.11.58 1.3.6.1.2.1.17.7.1.2.2.1.2 | grep 799

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.25.20.214.77.62.76.64 = INTEGER: 25

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.25.28.189.185.98.1.160 = INTEGER: 25

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.25.132.201.178.139.248.224 = INTEGER: 25

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.25.132.201.178.140.55.64 = INTEGER: 25

SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.25.132.201.178.140.61.0 = INTEGER: 25

25 это влан, все что после - мак в десятичном формате. после интеджера номер порта.

В идеале бы отбросить все данные кроме маков, перевести в десятичные и присвоить каждому их переменным. Начал. дошел до snmpwalk -v2c -c public 192.23.11.58 1.3.6.1.2.1.17.7.1.2.2.1.2 | grep 25 | cut -d"=" -f1 | cut -c 37-100 . Понял что за ночь ну никак не смогу, а надо, и решил поныть на форуме, вдруг помогут....

awk -F'[. ]' '{ OFS=":"; for (i = 1; i < 7; i++) $i = sprintf("%0.2x", $(i+9)); NF = 6 } 1'
unterwulf ()
$ printf '%x:%x:%x:%x:%x:%x\n' 132 201 178 140 55 64
84:c9:b2:8c:37:40
Black_Shadow ★★★★★ ()

В идеале бы отбросить все данные кроме маков

Сколь я помню, у snmpwalk есть опции для формата вывода.

dexpl ★★★★★ ()

dexpl правильно подсказал про формат вывода.

Все маки в vlan 25

snmpwalk -v 2c -c public -OXq 192.23.11.58 Q-BRIDGE-MIB::dot1qTpFdbPort.25 | sed -e 's/^.*\]\[//;s/\]//'

«grep 25» - это неправильное решение, если нужно только 25-й vlan.

Чтоб оно по имени искало, нужно мибы подпихнуть. А чтоб оно не давилось подчеркиваниями в длинковских мибах, нужно в snmp.conf иметь строчку

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

unterwulf спасибо , но что то нереально сложное. Black_Shadow спасибо, но не работает , потому что : printf '%x:%x:%x:%x:%x:%x\n' 52 8 4 74 78 3 34:8:4:4a:4e:3 Хотя это пока лучшее чего удалось добиться. как бы заполнить нулями недостающее ? vel спасибо но не подходит, нет таких прав и не будет :(

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

ЕМНИП snmp.conf можно из домашней директории пользователя подгружать - туда-то права доступа есть? Но возможно я не прав...

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

как бы заполнить нулями недостающее ?

Вы случайно не про это printf '%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n' ?

anc ★★★★★ ()
| sed -re '1i16o
s/.*\.(([0-9]+\.){5}[0-9]+) = .*/\1p/
s/\./n[:]n/g' | dc
DonkeyHot ★★★★★ ()
Ответ на: комментарий от asch11

Хотя это пока лучшее чего удалось добиться.

Так попробуй

printf '%0x:%0x\n'
ну ты понел, нолик добавь, может сработает, в си так нужно делать.

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

В общем переписал весь скрипт по другому. Ну по плану он должен искать верхние свичи по ветке. Вместо перебора всех маков в управляющем влане решил сделать по stp инстансам. Получилось и работает шустрей и логика пожалуй более удачная, не будет работать правда для веток(некольцевых топологий) где стп соотвественно отключен. Но есть опять таки существенный баг как раз с нулями в выводе :

snmpwalk -v2c -c public 192.19.3.1 1.3.6.1.2.1.4.22.1.2 IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.0 = STRING: ff:ff:ff:ff:ff:ff

IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.1 = STRING: 34:8:4:4a:4e:3

IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.11 = STRING: 34:8:4:5c:8:90

IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.26 = STRING: ac:f1:df:bc:3:18

IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.57 = STRING: 78:54:2e:45:6:40

как видите где перед символом 0,то 0 дэлинковский ответ почему то не учитывает.а как бы следущий свич вычисляется грепом арп таблицы,так в какой то момент (когда встречается такой свич) работа скрипта прерывается т.к. он не нашел ничего : данные моего криворукого дебага с коментариями:

./2script.sh agr= 192.19.3.1

mac= 28:10:7b:fc:bb:80

switch v vetke nomer 4 // номер свича в кольце,потом используется для количества итерации цикла

44:B3:A0 // мак текущего свича, (в принципе не нужен тут.) nextswitch

192.19.3.85 // нашел следующий свич nextarp

45:05:E0 // нашел следующий арп nextswitch1 // нихрена не нашел следующий свич nextarp

45:05:E0 // следующий арп разумеется не поменял т.к. не нашел следующий свич а не нашел потому что :

cat 22 | grep -i 45:05:E0 // временный файл арп таблицы агрегации $ // говорит что мне тут борода.

а говорит он так потому что в файле он вывелся вот так :

IP-MIB::ipNetToMediaPhysAddress.5122.192.19.3.86 = STRING: 78:54:2e:45:5:e0

Отсюда вопрос .как средствами баша дописать в 78:54:2e:45:5:e0 нолик перед 5. Либо же заставить корректно грепать «45:05:E0». можно конечно Пекспектом вытягивать таблицу арп, там она корректная :

25 192.19.3.12 34-08-04-5C-72-30 Dynamic

25 192.19.3.13 FC-75-16-E1-6B-A0 Dynamiс

asch11 ()
Ответ на: комментарий от u0atgKIRznY5

Спасибо за тролинг но так не выйдет, адрес 45:05:E0 высчитывается динамически мибом, и таким мибом который выводит стп desingated bridge он выводится корректно. а вот миб который выводит арп таблицу у дэлинка выводит хрень, то бишь 45:5:e0 . в другом случае это будет какое нибудь сс:2:1

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

Полный вариант в 1 строчку для потомков : mac=«123 12 4 74 78 3» ; convmac=`printf '%x:%x:%x:%x:%x:%x\n' $mac | sed 's/\b\(\w\)\b/0\1/g' ` ; echo $convmac

а то не легко пришлось

asch11 ()
Ответ на: комментарий от anc

эм... теперь уже я сам не понимаю почему, как то я его стороной обошел видать вначале. но потом начал работать с другим оидом, так что конструкция с седом все ровно нужна...

asch11 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.