Скрипт считывания таблицы мак адресов с управляемых коммутаторов D-Link.
Чтобы это работало, необходимо поместить код в файл и выполнить его в Unix системе.
#!/bin/bash HOST=$1 PORTPARAM=$2 if [[ -n "$PORTPARAM" && ( "$PORTPARAM" -lt 0 || "$PORTPARAM" -gt 24 ) ]]; then echo "Error port number!" exit fi for string in `snmpwalk -v 2c -c public $HOST 1.3.6.1.2.1.17.7.1.2.2.1.2 -O qn|sed -e "s/^\.//g" -e "s/ /./g"`; do decmac=$(echo $string|awk -F "." '{print $15";"$16";"$17";"$18";"$19";"$20}') vlan=$(echo $string|awk -F "." '{print $14 }') mac="" for hex in `echo "obase=16; $decmac"|bc`; do if [ ${#hex} == "1" ]; then hex="0"$hex fi if [ -z $mac ]; then mac=$hex else mac=$mac":"$hex fi done port=$(echo $string|awk -F "." '{print $21}') if [ -z "$PORTPARAM" ]; then printf $vlan"\t"$mac"\t"$port"\n" elif [ $PORTPARAM == $port ]; then printf $vlan"\t"$mac"\t"$port"\n" fi done
Для преобразования decmac в hexmac лучше использовать awk:
# в ${snmpAnswer} лежит строка ответа snmp-агента без статической части oid-а
decMac=`echo ${snmpAnswer} | sed -e ‘s/^[^.]*\.//; s/\s*=.*$//; s/\./ /g’`
hexMac=`echo ${decMac} | awk ‘{ printf «%02X%02X%02X%02X%02X%02X», $1, $2, $3, $4, $5, $6; }’`
отлично!