Get FDB from D-Link switches

Скрипт считывания таблицы мак адресов с управляемых коммутаторов 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

Вливайтесь в общение

2 комментария

Добавить комментарий

  1. Для преобразования 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; }’`