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:
{"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:
- 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:
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
Zatím žádné komentáře.