Powrót do strony głównej

Dekodowanie SMS w MikroTik: PDU, sklejanie wiadomości dla deweloperów

Artykuł wyjaśnia, jak obsługiwać SMS w MikroTik RouterOS, w tym wyodrębnianie danych za pośrednictwem PDU, dekodowanie różnych kodowań tekstu i sklejanie złożonych wiadomości. Materiał jest przeznaczony dla deweloperów tworzących aplikacje Android do monitorowania i automatyzacji.

Jak dekodować SMS w MikroTik: pełny rozbiór PDU i sklejania
Advertisement 728x90

Dekodowanie SMS w MikroTik: analiza PDU i łączenie długich wiadomości

Odbieranie i przetwarzanie SMS przez MikroTik RouterOS otwiera możliwości monitorowania i automatyzacji. W artykule omówiono metodę wydobywania wiadomości poprzez skrypt e-mail i późniejsze dekodowanie PDU dla poprawnego wyświetlania tekstu, w tym łączenie złożonych SMS. Akcent położono na realizację techniczną dla programistów aplikacji na Androida.

Wydobywanie danych SMS z MikroTik

Począwszy od RouterOS 7.15, system zapewnia dostęp do pełnych danych SMS, w tym PDU (Protocol Data Unit), poprzez komendę /tool/sms/inbox/print detail. PDU zawiera wszystkie informacje serwisowe i tekst wiadomości w zakodowanej formie. Do automatyzacji można wykorzystać dwa podejścia: bezpośrednie połączenie przez API z biblioteką mikrotik-java lub pozyskiwanie danych przez e-mail za pomocą skryptu.

Skrypt formatuje odpowiedź routera w ciąg JSON dla każdego SMS i wysyła go na podany adres. Przykład zapisu:

Google AdInline article slot
{"phone":"+79011234567","timestamp":"2026-03-09 21:30:51+03:00","message":"jakiś tekst","pdu":"07919761980644F0040B919720481784F50000623090120315211BF377BB0CA297F17410FDFE06DDDF72F21C34AFC3E16F391D","source":"usb2,0","type":"class-0"}

Następnie aplikacja parsuje te dane, tworząc obiekty klasy Sms do dalszego przetwarzania.

Struktura PDU i wstępna analiza

PDU to szesnastkowy ciąg zawierający pola serwisowe i dane użytkownika. Dekodowanie rozpoczyna się od konwersji ciągu HEX na tablicę bajtów, po wcześniejszym oczyszczeniu z nieszesnastkowych znaków i zapewnieniu parzystej długości.

Kluczowe etapy wstępnej analizy PDU:

Google AdInline article slot
  • SMSC (Service Center Address): pierwszy bajt wskazuje długość adresu centrum usług.
  • First Octet: określa typ PDU, w tym flagę obecności User Data Header (UDHI) dla złożonych wiadomości.
  • Originating Address: zawiera numer nadawcy z określeniem długości i formatu.
  • PID (Protocol Identifier): zazwyczaj ma wartość 0x00 dla standardowych SMS.
  • DCS (Data Coding Scheme): krytycznie ważne pole, określające kodowanie tekstu (7-bit, 8-bit lub UCS2).
  • SCTS (Service Centre Time Stamp): znacznik czasowy otrzymania wiadomości.
  • UDL (User Data Length): długość danych użytkownika, której interpretacja zależy od kodowania.

Przetwarzanie złożonych wiadomości i kodowań

Jeśli w First Octet ustawiona jest flaga UDHI (bit 0x40), SMS jest częścią długiej wiadomości. W tym przypadku obecny jest User Data Header (UDH), zawierający informacje do łączenia części. UDH obejmuje identyfikator wiadomości, całkowitą liczbę części i numer kolejny bieżącej części.

Algorytm przetwarzania UDH:

  • Określenie długości nagłówka i jego typu (8-bit lub 16-bit reference).
  • Wyodrębnienie numeru kolejnego części do późniejszego składania.
  • Korekta indeksu danych i długości tekstu w zależności od kodowania.

Dla 7-bitowej kodowania UDH zajmuje określoną liczbę septetów, które należy pominąć przed dekodowaniem tekstu. Obliczenie wykonuje się według wzoru:

Google AdInline article slot
private static int getUdhSeptetsCount(int udhLen) {
    return (udhLen * 8 + 6) / 7;
}

Dla kodowań UCS2 i 8-bit nagłówek jest po prostu odejmowany od całkowitej objętości danych.

Dekodowanie tekstu wiadomości

Finałowy etap to konwersja bajtów na czytelny tekst na podstawie DCS. Główne kodowania i metody przetwarzania:

  • UCS2 (UTF-16BE): stosowane przy wartości bitów 2–3 w DCS równej 10xx. Tekst jest dekodowany przy użyciu StandardCharsets.UTF_16BE.
  • 8-bit Data: odpowiada wartości 01xx w DCS, używane dla danych binarnych lub alternatywnych kodowań.
  • 7-bit GSM: standardowe kodowanie dla łaciny i podstawowych symboli, wymaga specjalnego algorytmu rozpakowywania septetów na bajty.

Po dekodowaniu tekst może być wyświetlony w aplikacji lub użyty do dalszej logiki, na przykład powiadomień o zdarzeniach.

Co jest ważne

  • RouterOS 7.15+ dostarcza PDU dla pełnej kontroli nad SMS.
  • Złożone wiadomości wymagają przetwarzania UDH dla poprawnego łączenia.
  • Kodowanie tekstu jest określone przez pole DCS i wpływa na metodę dekodowania.
  • Automatyzacja przez skrypt e-mail upraszcza integrację z systemami zewnętrznymi.
  • Poprawne przetwarzanie ciągów HEX i granic danych zapobiega błędom parsowania.

— Editorial Team

Advertisement 728x90

Czytaj dalej