# Decodificación de SMS en MikroTik: Análisis de PDU y concatenación de mensajes largos
Recibir y procesar SMS a través de MikroTik RouterOS desbloquea funciones potentes de monitoreo y automatización. Este artículo profundiza en la extracción de mensajes con un script de correo, decodificación de PDU para mostrar el texto correctamente y concatenación de SMS multipartes. Está pensado para desarrolladores de apps Android que buscan una implementación técnica sólida.
Extracción de datos SMS de MikroTik
Desde RouterOS 7.15, tienes acceso completo a los detalles de los SMS, incluido el PDU (Unidad de Datos de Protocolo), mediante el comando /tool/sms/inbox/print detail. El PDU contiene todos los metadatos y el texto del mensaje codificado. Para automatizar, opta por integración directa con la API usando la librería mikrotik-java o recupera los datos por correo con un script personalizado.
El script formatea cada SMS como una cadena JSON y lo envía por correo a la dirección que indiques. Aquí un ejemplo:
{"phone":"+79011234567","timestamp":"2026-03-09 21:30:51+03:00","message":"some text","pdu":"07919761980644F0040B919720481784F50000623090120315211BF377BB0CA297F17410FDFE06DDDF72F21C34AFC3E16F391D","source":"usb2,0","type":"class-0"}
Tu app parsea este JSON para crear objetos Sms y procesarlos.
Estructura del PDU y análisis inicial
El PDU es una cadena hexadecimal que almacena campos de servicio y datos de usuario. La decodificación comienza convirtiendo la cadena HEX a un array de bytes, tras eliminar caracteres no hexadecimales y verificar longitud par.
Pasos clave en el análisis inicial del PDU:
- SMSC (Dirección del Centro de Servicio): El primer byte indica la longitud de la dirección SMSC.
- Primer octeto: Define el tipo de PDU, incluido el indicador UDHI (Encabezado de Datos de Usuario) para mensajes multipartes.
- Dirección origen: Número del remitente, con longitud y formato.
- PID (Identificador de Protocolo): Generalmente 0x00 para SMS estándar.
- DCS (Esquema de Codificación de Datos): Campo clave que dicta la codificación del texto (7 bits, 8 bits o UCS2).
- SCTS (Marca de Tiempo del Centro de Servicio): Momento de recepción del mensaje.
- UDL (Longitud de Datos de Usuario): Longitud de los datos de usuario, interpretada según la codificación.
Manejo de mensajes multipartes y codificaciones
Si el Primer Octeto tiene el bit UDHI activado (0x40), forma parte de un mensaje largo. Esto activa un Encabezado de Datos de Usuario (UDH) con info para reensamblar: ID del mensaje, total de partes y número de secuencia.
Algoritmo de procesamiento UDH:
- Determina longitud y tipo del encabezado (referencia de 8 o 16 bits).
- Extrae el número de secuencia de la parte para reensamblar.
- Ajusta el índice de datos y longitud del texto según la codificación.
Para codificación de 7 bits, el UDH ocupa un número fijo de septetos que se saltan antes de decodificar el texto. Usa esta fórmula:
private static int getUdhSeptetsCount(int udhLen) {
return (udhLen * 8 + 6) / 7;
}
Para UCS2 y 8 bits, resta simplemente el encabezado de la longitud total de datos.
Decodificación del texto del mensaje
Paso final: convierte bytes a texto legible usando el DCS. Codificaciones principales y manejo:
- UCS2 (UTF-16BE): Activado por bits 2-3 del DCS como 10xx. Decodifica con
StandardCharsets.UTF_16BE. - Datos de 8 bits: Coincide con DCS 01xx, para datos binarios o codificaciones alternativas.
- 7 bits GSM: Predeterminado para latín y caracteres básicos; requiere un desempaquetador de septetos a bytes personalizado.
Una vez decodificado, muestra el texto en tu app o pásalo a notificaciones de eventos y lógica.
Lecciones clave
- RouterOS 7.15+ expone el PDU para control total de SMS.
- Mensajes multipartes requieren manejo de UDH para concatenación correcta.
- El campo DCS define la codificación y método de decodificación.
- La automatización con script de correo agiliza la integración con sistemas externos.
- Limpieza adecuada de cadenas HEX y verificaciones de límites evitan errores de análisis.
— Editorial Team
Aún no hay comentarios.