Aplikacja Winbox w momencie rozpoczęcia wykrywania urządzeń, wysyła na adresie rozgłoszeniowym trzy ramki UDP o wartości
0x00000000
, na porcie 5678. Urządzenia odpowiadają ramką w formacie MNDP, bardzo podobną do
CDP.
Ponieważ skrypt do wykrywania mikrotików napisałem w perlu, strukturę ramki przedstawię jako argument funkcji
unpack, a wygląda ona następująco:
@s = unpack "H2H2H4(H4n/a*)*", $ramka;
MNDP CDP
$s[0] ?? wersja ramki CDP
$s[1] ?? time-to-live
$s[2] age? suma kontrolna
(
$s[3] typ typ
X
$s[4] wartość wartość
)
...
W tabeli zawarto porównanie elementów struktury ramki MNDP z ramką CDP. Trzy pierwsze elementy struktury są ciężkie do zidentyfikowania, na podstawie wartości które tam się pojawiają. Element oznaczony
X
to długość następującego po nim łańcucha. Element ten jest automatycznie "wchłaniany" przez
unpack, dlatego nie występuje jako osobny element w zwracanej tablicy. Element
$s[3]
, jak sama nazwa wskazuje, zawiera typ przesyłanej wartości. Rozpoznane typy:
0x0001 MAC interfejsu z którego urządzenie wysłało odpowiedź
0x0005 identyfikator urządzenia (domyślnie MikroTik)
0x0007 wersja RouterOS/SwOS
0x0008 platforma
0x000a uptime w sekundach (unsigned long)
0x000b software-id - jeśli dotyczy
0x000c model RouterBOARD'a - jeśli dotyczy
0x000d niezidentyfikowany - zawsze pusty łańcuch
Więcej typów nie zaobserwowałem, być może jest ich więcej (sprawdzałem ramki dla różnych wersji oprogramowania RouterOS oraz SwOS).
Grup, składających się z elementów
$s[3]
i
$s[4]
jest kilka. Ilość i ich rodzaj, uzależniona jest od wersji RouterOS/SwOS.
Na razie to tyle, skrypt w kolejnej części.
Brak komentarzy:
Prześlij komentarz