SMS auf MikroTik entschlüsseln: PDU parsen und lange Nachrichten zusammenfügen
Das Empfangen und Verarbeiten von SMS über MikroTik RouterOS ermöglicht leistungsstarke Überwachungs- und Automatisierungsfunktionen. Dieser Artikel taucht ein in die Extraktion von Nachrichten mit einem E-Mail-Skript, das Decodieren von PDU für eine präzise Textdarstellung und das Zusammenfügen mehrteiliger SMS. Er ist speziell für Android-App-Entwickler gedacht, die eine solide technische Umsetzung suchen.
SMS-Daten aus MikroTik extrahieren
Ab RouterOS 7.15 haben Sie vollen Zugriff auf SMS-Details, einschließlich PDU (Protocol Data Unit), über den Befehl /tool/sms/inbox/print detail. PDU enthält alle Metadaten und den codierten Nachrichten-Text. Für Automatisierungen empfehle ich die direkte API-Integration mit der mikrotik-java-Bibliothek oder das Abrufen der Daten per E-Mail mit einem benutzerdefinierten Skript.
Das Skript formatiert jede SMS als JSON-String und versendet sie an Ihre angegebene Adresse. Hier ein Beispiel:
{"phone":"+79011234567","timestamp":"2026-03-09 21:30:51+03:00","message":"some text","pdu":"07919761980644F0040B919720481784F50000623090120315211BF377BB0CA297F17410FDFE06DDDF72F21C34AFC3E16F391D","source":"usb2,0","type":"class-0"}
Ihre App parst dann dieses JSON und erstellt Sms-Objekte für die Weiterverarbeitung.
PDU-Struktur und erstes Parsen
PDU ist ein hexadezimaler String, der Service-Felder und Benutzerdaten enthält. Das Decodieren beginnt mit der Umwandlung des HEX-Strings in ein Byte-Array – nach Entfernen nicht-hexadezimaler Zeichen und Sicherstellung einer geraden Länge.
Wichtige Schritte beim initialen PDU-Parsen:
- SMSC (Service Center Address): Erstes Byte gibt die Länge der SMSC-Adresse an.
- Erstes Oktett: Legt den PDU-Typ fest, inklusive UDHI-Flag (User Data Header) für mehrteilige Nachrichten.
- Absenderadresse: Telefonnummer des Senders mit Längen- und Formatangaben.
- PID (Protocol Identifier): Meist 0x00 für Standard-SMS.
- DCS (Data Coding Scheme): Entscheidendes Feld, das die Textcodierung vorgibt (7-Bit, 8-Bit oder UCS2).
- SCTS (Service Centre Time Stamp): Zeitstempel des Empfangs.
- UDL (User Data Length): Länge der Benutzerdaten, interpretiert je nach Codierung.
Mehrteilige Nachrichten und Codierungen handhaben
Wenn das Erste Oktett das UDHI-Flag gesetzt hat (Bit 0x40), handelt es sich um einen Teil einer langen Nachricht. Das löst einen User Data Header (UDH) aus, der Details zur Zusammenfügung enthält: Nachrichten-ID, Gesamtanzahl Teile und Sequenznummer.
UDH-Verarbeitungsalgorithmus:
- Headerlänge und Typ (8-Bit oder 16-Bit-Referenz) ermitteln.
- Teilenfolgennummer für die Zusammenfügung extrahieren.
- Datenindex und Textlänge je nach Codierung anpassen.
Bei 7-Bit-Codierung nimmt UDH eine feste Anzahl von Septetten ein, die übersprungen werden müssen. Nutzen Sie diese Formel:
private static int getUdhSeptetsCount(int udhLen) {
return (udhLen * 8 + 6) / 7;
}
Bei UCS2 und 8-Bit einfach den Header von der Gesamtdatenlänge abziehen.
Nachrichten-Text decodieren
Der letzte Schritt: Bytes mit Hilfe von DCS in lesbaren Text umwandeln. Wichtigste Codierungen und Behandlung:
- UCS2 (UTF-16BE): Ausgelöst durch DCS-Bits 2–3 als 10xx. Decodieren mit
StandardCharsets.UTF_16BE. - 8-Bit-Daten: Entspricht DCS 01xx, für Binärdaten oder alternative Codierungen.
- 7-Bit-GSM: Standard für Latein- und Basissymbole; benötigt einen eigenen Septett-zu-Byte-Unpacker.
Nach dem Decodieren können Sie den Text in Ihrer App anzeigen oder in Ereignisbenachrichtigungen und Logik einfließen lassen.
Wichtige Erkenntnisse
- RouterOS 7.15+ stellt PDU für volle SMS-Kontrolle bereit.
- Mehrteilige Nachrichten erfordern UDH-Behandlung für korrekte Zusammenfügung.
- DCS-Feld bestimmt Codierung und Decodierungsmethode.
- E-Mail-Skript-Automatisierung vereinfacht Integration externer Systeme.
- Saubere HEX-String-Reinigung und Grenzprüfungen vermeiden Parse-Fehler.
— Editorial Team
Noch keine Kommentare.