Volver al inicio

Decodificación de SMS en MikroTik: PDU, Concatenación de Mensajes para Desarrolladores

El artículo explica cómo procesar SMS en MikroTik RouterOS, incluyendo extracción de datos vía PDU, decodificación de varias codificaciones de texto y concatenación de mensajes multipartes. El material está destinado a desarrolladores que crean apps de Android para monitoreo y automatización.

Cómo Decodificar SMS en MikroTik: Desglose Completo de PDU y Concatenación
Advertisement 728x90

# 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:

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"}

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
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

Advertisement 728x90

Leer después