## Décodage des SMS sur MikroTik : Analyse PDU et concaténation des messages longs
Recevoir et traiter les SMS via MikroTik RouterOS débloque des fonctionnalités puissantes de surveillance et d'automatisation. Cet article explore l'extraction des messages à l'aide d'un script email, le décodage PDU pour un affichage précis du texte, et la concaténation des SMS multiparts. Il est conçu pour les développeurs d'applications Android en quête d'une implémentation technique solide.
Extraction des données SMS depuis MikroTik
Dès RouterOS 7.15, vous accédez pleinement aux détails des SMS, y compris le PDU (Protocol Data Unit), via la commande /tool/sms/inbox/print detail. Le PDU regroupe toutes les métadonnées et le texte du message encodé. Pour l'automatisation, optez pour une intégration directe via l'API avec la bibliothèque mikrotik-java ou récupérez les données par email grâce à un script personnalisé.
Le script formate chaque SMS en chaîne JSON et l'envoie à l'adresse indiquée. Voici un exemple d'entrée :
{"phone":"+79011234567","timestamp":"2026-03-09 21:30:51+03:00","message":"some text","pdu":"07919761980644F0040B919720481784F50000623090120315211BF377BB0CA297F17410FDFE06DDDF72F21C34AFC3E16F391D","source":"usb2,0","type":"class-0"}
Votre application parse ensuite ce JSON pour créer des objets Sms destinés au traitement ultérieur.
Structure PDU et analyse initiale
Le PDU est une chaîne hexadécimale contenant les champs de service et les données utilisateur. Le décodage commence par convertir la chaîne HEX en tableau de bytes — après suppression des caractères non hexadécimaux et vérification d'une longueur paire.
Étapes clés de l'analyse initiale du PDU :
- SMSC (Adresse du centre de service) : Le premier octet indique la longueur de l'adresse SMSC.
- Premier octet : Définit le type PDU, incluant le drapeau UDHI (User Data Header) pour les messages multiparts.
- Adresse d'origine : Numéro de l'expéditeur, avec longueur et format.
- PID (Identifiant de protocole) : Généralement 0x00 pour les SMS standards.
- DCS (Schéma de codage des données) : Champ essentiel déterminant l'encodage du texte (7 bits, 8 bits ou UCS2).
- SCTS (Horodatage du centre de service) : Moment de réception du message.
- UDL (Longueur des données utilisateur) : Longueur des données utilisateur, interprétée selon l'encodage.
Gestion des messages multiparts et des encodages
Si le premier octet active le drapeau UDHI (bit 0x40), il s'agit d'une partie d'un message long. Cela déclenche un en-tête de données utilisateur (UDH) avec les infos pour reassembler les parties : ID du message, nombre total de parties et numéro de séquence.
Algorithme de traitement UDH :
- Déterminer la longueur et le type de l'en-tête (référence 8 bits ou 16 bits).
- Extraire le numéro de séquence de la partie pour le reassemblage.
- Ajuster l'index des données et la longueur du texte selon l'encodage.
Pour l'encodage 7 bits, l'UDH occupe un nombre fixe de septets à ignorer avant de décoder le texte. Utilisez cette formule :
private static int getUdhSeptetsCount(int udhLen) {
return (udhLen * 8 + 6) / 7;
}
Pour UCS2 et 8 bits, soustrayez simplement l'en-tête de la longueur totale des données.
Décodage du texte du message
Étape finale : convertir les bytes en texte lisible via le DCS. Principaux encodages et gestion :
- UCS2 (UTF-16BE) : Activé par les bits 2-3 du DCS en 10xx. Décoder avec
StandardCharsets.UTF_16BE. - Données 8 bits : Correspond au DCS 01xx, pour données binaires ou encodages alternatifs.
- 7 bits GSM : Par défaut pour latin et caractères basiques ; nécessite un décompresseur septet-byte personnalisé.
Une fois décodé, affichez le texte dans votre app ou intégrez-le dans des notifications d'événements et de la logique.
Points clés
- RouterOS 7.15+ expose le PDU pour un contrôle total des SMS.
- Les messages multiparts exigent une gestion UDH pour une concaténation correcte.
- Le champ DCS définit l'encodage et la méthode de décodage.
- L'automatisation par script email simplifie l'intégration avec des systèmes externes.
- Un nettoyage correct de la chaîne HEX et des vérifications de limites évitent les erreurs d'analyse.
— Editorial Team
Aucun commentaire pour le moment.