26 marca 2011

MNDP cz.2

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: