홈으로 돌아가기

MikroTik에서 SMS 디코딩: 개발자를 위한 PDU, 메시지 연결

이 기사는 MikroTik RouterOS에서 SMS 처리 방법, PDU를 통한 데이터 추출, 다양한 텍스트 인코딩 디코딩 및 멀티파트 메시지 연결을 설명합니다. 모니터링 및 자동화를 위한 Android 앱을 만드는 개발자를 위한 자료입니다.

MikroTik에서 SMS 디코딩 방법: 전체 PDU 및 연결 분석
Advertisement 728x90

MikroTik에서 SMS 디코딩: PDU 파싱과 긴 메시지 연결

MikroTik RouterOS를 통해 SMS를 수신하고 처리하면 강력한 모니터링과 자동화 기능을 활용할 수 있습니다. 이 글에서는 이메일 스크립트를 사용해 메시지를 추출하고, PDU를 디코딩하여 정확한 텍스트를 표시하며, 다중 파트 SMS를 연결하는 방법을 자세히 알아봅니다. 안드로이드 앱 개발자를 위한 실전 기술 구현 가이드입니다.

MikroTik에서 SMS 데이터 추출

RouterOS 7.15 버전부터 /tool/sms/inbox/print detail 명령어로 PDU(Protocol Data Unit)를 포함한 SMS 상세 정보를 완전히 확인할 수 있습니다. PDU에는 모든 메타데이터와 인코딩된 메시지 텍스트가 압축되어 있습니다. 자동화를 위해 mikrotik-java 라이브러리를 사용한 직접 API 연동이나 커스텀 스크립트로 이메일을 통해 데이터를 가져오는 방법을 추천합니다.

스크립트는 각 SMS를 JSON 문자열 형식으로 변환해 지정한 이메일 주소로 전송합니다. 샘플 데이터는 다음과 같습니다:

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

앱에서는 이 JSON을 파싱해 Sms 객체를 생성하고 후속 처리를 진행합니다.

PDU 구조와 초기 파싱

PDU는 서비스 필드와 사용자 데이터를 담은 16진수 문자열입니다. 디코딩은 먼저 비16진수 문자를 제거하고 길이를 짝수로 맞춘 후 바이트 배열로 변환하는 것으로 시작합니다.

초기 PDU 파싱 주요 단계:

Google AdInline article slot
  • SMSC (서비스 센터 주소): 첫 바이트에 SMSC 주소 길이가 표시됩니다.
  • 첫 번째 옥텟: PDU 유형을 설정하며, 다중 파트 메시지를 위한 UDHI 플래그(사용자 데이터 헤더)를 포함합니다.
  • 발신자 주소: 발신자 번호로 길이와 형식 정보가 포함됩니다.
  • PID (프로토콜 식별자): 일반 SMS는 0x00입니다.
  • DCS (데이터 코딩 방식): 텍스트 인코딩(7비트, 8비트, UCS2)을 결정하는 핵심 필드입니다.
  • SCTS (서비스 센터 타임스탬프): 메시지 수신 시각입니다.
  • UDL (사용자 데이터 길이): 인코딩에 따라 해석되는 사용자 데이터 길이입니다.

다중 파트 메시지와 인코딩 처리

첫 번째 옥텟에 UDHI 플래그(0x40 비트)가 설정되어 있으면 긴 메시지의 일부입니다. 이 경우 사용자 데이터 헤더(UDH)가 포함되어 메시지 ID, 총 파트 수, 순서 번호 등의 재조립 정보를 제공합니다.

UDH 처리 알고리즘:

  • 헤더 길이와 타입(8비트 또는 16비트 참조)을 확인합니다.
  • 재조립을 위한 파트 순서 번호를 추출합니다.
  • 인코딩에 따라 데이터 인덱스와 텍스트 길이를 조정합니다.

7비트 인코딩의 경우 UDH가 septet 단위로 공간을 차지하므로 텍스트 디코딩 전에 건너뜁니다. 다음 공식을 사용하세요:

Google AdInline article slot
private static int getUdhSeptetsCount(int udhLen) {
    return (udhLen * 8 + 6) / 7;
}

UCS2와 8비트는 총 데이터 길이에서 헤더를 단순히 빼면 됩니다.

메시지 텍스트 디코딩

마지막 단계는 DCS에 따라 바이트를 읽을 수 있는 텍스트로 변환하는 것입니다. 주요 인코딩과 처리 방법:

  • UCS2 (UTF-16BE): DCS 비트 2–3이 10xx일 때 발생. StandardCharsets.UTF_16BE로 디코딩합니다.
  • 8비트 데이터: DCS 01xx에 해당하며, 바이너리 데이터나 대체 인코딩에 사용됩니다.
  • 7비트 GSM: 라틴 문자와 기본 문자에 기본 적용; septet-to-byte 언패커가 필요합니다.

디코딩 후 앱에 텍스트를 표시하거나 이벤트 알림과 로직에 활용하세요.

주요 요약

  • RouterOS 7.15+에서 PDU를 통해 SMS를 완벽히 제어할 수 있습니다.
  • 다중 파트 메시지는 UDH 처리를 통해 제대로 연결해야 합니다.
  • DCS 필드가 텍스트 인코딩과 디코딩 방식을 결정합니다.
  • 이메일 스크립트 자동화로 외부 시스템 연동이 간편해집니다.
  • 16진수 문자열 정리와 경계 확인으로 파싱 오류를 방지하세요.

— Editorial Team

Advertisement 728x90

다음 읽기