Zpět na domů

Dekódování SMS v MikroTik: PDU, spojování zpráv pro vývojáře

Článek vysvětluje, jak zpracovávat SMS v MikroTik RouterOS, včetně extrakce dat přes PDU, dekódování různých kódování textu a spojování složených zpráv. Materiál je určen pro vývojáře, kteří vytvářejí Android aplikace pro monitorování a automatizaci.

Jak dekódovat SMS v MikroTik: úplný rozbor PDU a spojování
Advertisement 728x90

Dekódování SMS v MikroTik: analýza PDU a spojování dlouhých zpráv

Příjem a zpracování SMS přes MikroTik RouterOS otevírá možnosti pro monitoring a automatizaci. V článku je popsána metoda extrakce zpráv pomocí emailového skriptu a následné dekódování PDU pro správné zobrazení textu, včetně spojování složených SMS. Důraz je kladen na technickou implementaci pro vývojáře Android aplikací.

Extrakce SMS dat z MikroTik

Počínaje RouterOS 7.15, systém poskytuje přístup k úplným datům SMS, včetně PDU (Protocol Data Unit), přes příkaz /tool/sms/inbox/print detail. PDU obsahuje všechny služební informace a text zprávy v zakódované podobě. Pro automatizaci lze použít dva přístupy: přímé připojení přes API s knihovnou mikrotik-java nebo získání dat emailem pomocí skriptu.

Skript formátuje odpověď routeru do JSON řetězce pro každou SMS a odesílá jej na zadanou adresu. Příklad záznamu:

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

Dále aplikace parsuje tato data, vytvářející objekty třídy Sms pro následné zpracování.

Struktura PDU a počáteční analýza

PDU představuje hexadecimální řetězec obsahující služební pole a uživatelská data. Dekódování začíná převodem HEX řetězce na pole bajtů, předběžně jej očistit od nehexadecimálních znaků a zajistit sudou délku.

Klíčové etapy počáteční analýzy PDU:

Google AdInline article slot
  • SMSC (Service Center Address): první bajt udává délku adresy servisního centra.
  • First Octet: určuje typ PDU, včetně příznaku přítomnosti User Data Header (UDHI) pro složené zprávy.
  • Originating Address: obsahuje číslo odesílatele s uvedením délky a formátu.
  • PID (Protocol Identifier): obvykle má hodnotu 0x00 pro standardní SMS.
  • DCS (Data Coding Scheme): kriticky důležité pole, nastavující kódování textu (7-bit, 8-bit nebo UCS2).
  • SCTS (Service Centre Time Stamp): časové razítko příjmu zprávy.
  • UDL (User Data Length): délka uživatelských dat, jejíž interpretace závisí na kódování.

Zpracování složených zpráv a kódování

Pokud je v First Octet nastaven příznak UDHI (bit 0x40), SMS je součástí dlouhé zprávy. V tomto případě je přítomen User Data Header (UDH), obsahující informace pro spojení částí. UDH zahrnuje identifikátor zprávy, celkový počet částí a pořadové číslo aktuální části.

Algoritmus zpracování UDH:

  • Určení délky záhlaví a jeho typu (8-bit nebo 16-bit reference).
  • Extrakce pořadového čísla části pro následné sestavení.
  • Korekce indexu dat a délky textu v závislosti na kódování.

Pro 7-bitové kódování UDH zabírá určitý počet septetů, které je třeba přeskočit před dekódováním textu. Výpočet se provádí podle vzorce:

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

Pro kódování UCS2 a 8-bit se záhlaví jednoduše odečte z celkového objemu dat.

Dekódování textu zprávy

Finální etapa – převod bajtů na čitelný text na základě DCS. Hlavní kódování a metody zpracování:

  • UCS2 (UTF-16BE): použito při hodnotě bitů 2–3 v DCS rovné 10xx. Text je dekódován pomocí StandardCharsets.UTF_16BE.
  • 8-bit Data: odpovídá hodnotě 01xx v DCS, používá se pro binární data nebo alternativní kódování.
  • 7-bit GSM: standardní kódování pro latinku a základní symboly, vyžaduje speciální algoritmus rozbalení septetů na bajty.

Po dekódování může být text zobrazen v aplikaci nebo použit pro další logiku, například upozornění na události.

Co je důležité

  • RouterOS 7.15+ poskytuje PDU pro úplnou kontrolu nad SMS.
  • Složené zprávy vyžadují zpracování UDH pro správné spojení.
  • Kódování textu je určeno polem DCS a ovlivňuje metodu dekódování.
  • Automatizace pomocí emailového skriptu zjednodušuje integraci s externími systémy.
  • Správné zpracování HEX řetězců a hranic dat předchází chybám parsování.

— Editorial Team

Advertisement 728x90

Číst dál