Napisane przez: mikrotikls | 20 kwietnia, 2013

UBNT SNMP OID and Bash Scripting ..

Dawno mnie nie było .. Przepraszam, ale jak zwykle czasu bardzo nie wiele.

Dziś chciałem pokazać wszystkim w jaki sposób zmusić urządzenia klienckie firmy Ubiquity do wspópracy z protokołem SNMP, pobrać dane, obrobić jest w Bash’u i ładnie wrzucić do bazy danych Mysql.

Po stronie Ubi pozostaje nam tylko i jedynie włączyć wysyłanie danych po SNMP – urządzenia nie obsługują SNMP Trap, i w sumie dobrze ponieważ mamy do dyspozycji tylko SNMP v1, którego zabezpieczania pozostawiają wiele do życzenia. Robimy to w zakładce „Service” we wszystkich wersja AIROS’a. Sugerują zmienić community na default owego public na jakiś inny, jeżeli nie chcemy informować konkurencji o stanie naszej sieci 🙂

Teraz czas na przejście do konsoli linux’a 🙂

W moim przypadku założyłem generowanie listy adresów IP – które mają zostać odpytane przez snmpwalk’a – na podstawie pliku /etc/ethers.

#!/bin/bash
cat /etc/ethers | cut -d ” ” -f1 >> adresy
USER=”uzytkownik_mysql”
PASS=”tajne_haslo_mysql”
DATABASE=”nazwa_bazy”
HOST=”adresy”
#Robimy mała pętle
for i in $(grep „” $HOST); do
eval $( echo $i | awk ‚{ print „LOGIN=” $1 }’ )
echo „update tabela set signal=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.4 | cut -d”:” -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
#echo „update tabela set mac_klienta=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.2.1.2.2.1.6.2 | cut -d'”‚ -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
#echo „update tabela set mac_klienta=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.2.1.2.2.1.6.2 | cut -d -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
echo „update tabela set kanal=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.7 | cut -d”:” -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
echo „update tabela set rx=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.2 | cut -d”:” -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
echo „update tabela set tx=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.3 | cut -d”:” -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
#echo „update tabela set tx=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.2.3 | cut -d”:” -f2`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;

#SPRAWDZANIE WERSJI AIR OS
WERSJA=`snmpwalk -v1 -c public $LOGIN 1.2.840.10036.3.1.2.1.4 | cut -d”.” -f13`;
KONTROLKA=”5″;
KONTROLKA2=”0″;

if [ „$WERSJA” = „$KONTROLKA” ];
then
echo „update tabela set ssid=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.5.5 |cut -d „:” -f2|sed ‚s/.*/0x&/’|xxd -r`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
elif [ „$WERSJA” = „$KONTROLKA2” ];
then
echo „update tabela set ssid=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.5.6 | cut -d”:” -f2|sed -e ‚s/”//g’`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
else
echo „update tabela set ssid=’`snmpwalk -v1 -c public $LOGIN 1.3.6.1.4.1.14988.1.1.1.1.1.5.7 | cut -d”:” -f2|sed -e ‚s/”//g’`’ where ip=’$LOGIN’;” | mysql –user=$USER –password=$PASS  $DATABASE;
fi
done;

rm adresy

Najbardziej upierdliwe w przypadku SNMP i UBNT jest to, że różne wersje AIROS mają te same dane pod różnymi OID’ami, czasami zdarza się także, podają jakieś dane w postaci kodu heksadecymalnego. W moim skrypcie użyłem prostej instrukcji warunkowej, która sprawdza wersje oprogramowania i i wybiera odpowiedni OID .

Co możemy wyciągnąć po SNMP z UBNT ? Prawie wszystko 🙂 Dla mnie najważniejsze były takie rzeczy jak SSID i Poziom sygnału,model , oraz mac adres sprzętu który jest zainstalowany u klienta. Dane te mogą ulec zmianie, a mając zapięty powyższy skrypt w corn’ie dane mogą być odczytywane cały czas. Eliminujemy tym samym czynnik błędu ludzkiego 🙂

Samą strukrurę bazy trzeba dostosować dość mocno pod samego siebie i do systemu z którego się korzysta, dlatego pominę tą kwestie w tym wpisie. Jeżeli ktoś potrzebuje pomocy z chęcią dopiszę coś co będzie współpracować np. z LMS’em. Ja korzystam z własnego systemu obsługi użytkowników.

Mając dane w bazie danych możemy z nimi zrobić co chcemy, ograniczeniem jest tylko fantazja i wiedza 🙂

untitled


Dodaj komentarz

Kategorie