LINUX.ORG.RU
ФорумAdmin

Список маков и портов на свитчах D-Link, преобразование из DEC в HEX

 , ,


0

2

Добрый! Пытаюсь выписать суперкостыльный скриптик для забора маков по портам со свитчей D-Link. Заступорился при конвертации маков в нормальный машинный вид. забираем так

snmpwalk -v2c -c public -m +SNMPv2-SMI <SWITCH> 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.21.23.156.119.0 = INTEGER: 26
и так далее много строк. Вырезаем ненужное
snmpwalk -v2c -c public -m +SNMPv2-SMI <SWITCH> 1.3.6.1.2.1.17.7.1.2.2.1.2 | sed '/2.17.7.1.2.2.1.2.4000./d;/2.17.7.1.2.2.1.2.1./d;/INTEGER: 26/d;s/.*2.600.\(.*\)$/\1/g;s/\ =.*$//;s/\./\ /g'
(удаляем все ненужные строки с 1 и 4000 VID, удаляем всю мишуру и оставляем только 6 десятичных чисел разделённых пробелами - это и есть мак) результат
0 19 211 159 31 129
0 27 36 235 110 128
0 30 140 7 229 61
0 36 1 15 171 195
0 36 29 135 59 100
44 65 56 89 56 224
160 33 183 188 152 235
244 109 4 164 252 154
248 15 65 9 76 89
252 117 22 232 155 153
И вот на этом заглохла голова. Через printf '%02X:' одна строка практически нормально конвертируется, однако тут...
#printf '%02X:' `snmpwalk -v2c -c public -m +SNMPv2-SMI <SWITCH> 1.3.6.1.2.1.17.7.1.2.2.1.2 | sed '/2.17.7.1.2.2.1.2.4000./d;/2.17.7.1.2.2.1.2.1./d;/INTEGER: 26/d;s/.*2.600.\(.*\)$/\1/g;s/\ =.*$//;s/\./\ /g'`
00:13:D3:9F:1F:81:00:1B:24:EB:6E:80:00:1E:8C:07:E5:3D:00:24:01:0F:AB:C3:00:24:1D:87:3B:64:2C:41:38:59:38:E0:A0:21:B7:BC:98:EB:F4:6D:04:A4:FC:9A:F8:0F:41:09:4C:59:FC:75:16:E8:9B:99:
Вопрос: как бы так заставить printf разбивать по 6 чисел. Или кто знает более элегантное решение?


из входных данных понял только
SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.0.21.23.156.119.0 = INTEGER: 26
дальше автора накрыла волна отчаяния

zolden ★★★★★
()

имхо на awk было бы проще

snmpwalk -v2c -c public -m +SNMPv2-SMI <SWITCH> 1.3.6.1.2.1.17.7.1.2.2.1.2 | sed '/2.17.7.1.2.2.1.2.4000./d;/2.17.7.1.2.2.1.2.1./d;/INTEGER: 26/d;s/.*2.600.\(.*\)$/\1/g;s/\ =.*$//;s/\./\ /g' | awk '{printf(«%x:%x:%x:%x:%x:%x\n»,$1,$2,$3,$4,$5,$6);}'

ae1234 ★★
()

во - даже работает

snmpwalk -v2c -c public -m +SNMPv2-SMI SWITCH 1.3.6.1.2.1.17.7.1.2.2.1.2 | awk '{split($0,a,"."); printf(«%x:%x:%x:%x:%x:%x\n»,a[10],a[11],a[12],a[13],a[14],a[15]);}'

ae1234 ★★
()

printf '%02X:%02X:%02X:%02X:%02X%:02X\n'
и awk ни при чем.

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

спасибо! помогла конструкция вида

snmpwalk -v2c -c public -m +SNMPv2-SMI yub14.local 1.3.6.1.2.1.17.7.1.2.2.1.2 | sed '/2.17.7.1.2.2.1.2.4000./d;/2.17.7.1.2.2.1.2.1./d;/INTEGER: 26/d' | awk '{split($0,a,"."); printf("%02X:%02X:%02X:%02X:%02X:%02X\n",a[10],a[11],a[12],a[13],a[14],a[15]);}
sed обрезает ненужные влан и магистральные порты, а awk с printf собственно делают всё удобочитаемым)

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

тут вот sed и как раз лишний - обрезать ненужное можно и понятнее в awk
имхо

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

во - самый простой вариант

snmpwalk -v2c -c public -m +SNMPv2-SMI yub14.local 1.3.6.1.2.1.17.7.1.2.2.1.2 | awk '{split($0,a,"."); if(a[9]!=2 || $4==26) next; printf(«%02X:%02X:%02X:%02X:%02X:%02X\n»,a[10],a[11],a[12],a[13],a[14],a[15]);}'

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