SMS PDU编码数据串格式分析

简介:

PDU协议数据单元详细介绍

PDU 相当于一个数据包,它由构成消息(SMS)的信息组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。PDU结构根据短消息由移动终端发起或以移动终端为目的而不同。

PDU 中 USC 16bit编码用于发送Unicode字符,即中文等,7bit只能发ASCII字符,8bit用来发数据信息如图片铃音等。短信息内容长度140字节,最大可以发送160个字符,其中每个字符与编码方式占比为 [160字符/7位],[140字符/8位]或[70个字符/16位],在3GPP TS 24.011, 子条款 7.3. 定义了SMS消息应被封装在RPDUs(中继协议数据单元)数据串中。其中RPDU数据通过SIP MESSAGE Requests从一个蜂窝网络到另一个蜂窝网络,这些SIP请求应当使用MIME类型“application/vnd.3gpp.sms”

6种PDU介绍:

复制代码
1.SMS-DELIVER,包含从SC到MS的消息(基站发给手机的短信)。
2.SMS-DELIVER-REPORT,包含
    a)失败原因(如果需要的话)
    b) 对于SMS-DELIVER或SMS-STATUSREPORT的确认
3. SMS-SUBMIT,包含从MS到SC的消息(从手机发出到基站的短信)。 
4. SMS-SUBMIT-REPORT,包含
    a)失败原因(如果需要的话)
    b) 对于SMS-SUBMIT或SMS-COMMAND的确认
5. SMS-STATUS-REPORT,包含从SC到MS的状态报告。
6. SMS-COMMAND,包含从MS到SC的命令。
复制代码

GSM 7 bit Default Alphabet

每个字符代表7位,参阅3GPP TS 23.038 或 ETSI GSM 03.38.

7bit 的编码方式规则:

7bit编码是把所有8bit 数据的高位去掉,形成7bit 数据,接下来将7bit数据的第二个字节的最低位,移到第一个字字节的最高位形第一个新的8位数据,再把第三个字节的最后两位移到第二个字节的最高位形第二个新的数据,以此类推,最后一个不足8位的7bit 数据全部用0补充形成一个新的8bit数据。解码过程与编码过程相逆。

(GSM 7 bit Default Alphabet)

Numbering-plan-identification(号码鉴别)

0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;

一般默认为0001(国际格式),表示电话号码类型的。

下面是GSM03.40号码鉴别的解释:

复制代码
Bits3 2 1 0  
0 0 0 0    Unknown  
0 0 0 1    ISDN/telephone numbering plan (E.164/E.163) 
0 0 1 1    Data numbering plan (X.121) 
0 1 0 0    Telex numbering plan 
1 0 0 0    National numbering plan 
1 0 0 1    Private numbering plan  
1 0 1 0    ERMES numbering plan (ETSI DE/PS 3 01-3) 
1 1 1 1    Reserved for extension
复制代码

RP-DATA (SMS-SUBMIT类型 手机到基站) 

参考:3GPP TS 24.011 subclause 7.3.1.2

复制代码
RP-MESSAGE:000000069133010000F019069133010000F011000A9133163254760000AA05F330BB4E07
RPDU:000000069133010000F019
TPDU (SMS-SUBMIT):069133010000F011000A9133163254760000AA05F330BB4E07 
复制代码

短信内容:salut

数据串解码

RPDU数据串

复制代码
00 RP-Message Type  比特值=000 方向=手机到基站(Mobile Station to Network) RP-Message=RP-DATA
00 RP-Message Reference  值=0x00
00 RP-Originator Address  该字段仅包括长度指示符,对于传出信息,没有定义
复制代码

RP-Destination Address

此项为短信中心地址, 06代表地址长度,91=号码鉴别,用国际格式号码(在前面加‘+’),33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个

说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000

19 RP-User Data  十六进制占一个字节大小(代表十进制的25),表示TPDU的数据长度

TPDU数据串

SMSC Address information

短信中心地址信息,包含目标短信中心地址,06=地址长度,91=号码鉴别,用国际格式号码(在前面加‘+’),33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个

说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000

11 SMS-SUBMIT first octet    基本参数,不拒绝重复/无有效期/无状态的请求/没有用户数据头/无回复路径
00 TP-Message Reference

TP-Destination-Address

复制代码
0A=地址长度(代表十进制的10),91=号码鉴别id=ISDN,3316325476=+3361234567

00 TP-Protocol-identifier
00 TP-Data-Coding-Scheme    00表示7-bit编码(英文)、04表示8-bit编码(图片和铃声)、08表示UCS2编码(汉字)
AA TP-Validity-Period        有效期4天

05 TP-User-Data-Length        当使用7bit编码,长度就是消息内容字符数(salut=长度为5位)
复制代码

在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

TP-User-Data

F330BB4E07 在这个例子中内容为 salut

RP-DATA (SMS-DELIVER类型 基站到手机) 

复制代码
RPDU参考:3GPP TS 24.011 subclause 7.3.1.1
TPDU参考:3GPP TS 23.040 subclause 9.2.2.1
RP-MESSAGE:0100069133010000F0001E069133010000F0040A91331632547600000000000000000005F330BB4E07
RPDU:0100069133010000F0001E
TPDU (SMS-DELIVER):069133010000F0040A91331632547600000000000000000005F330BB4E07
复制代码

数据串解码

RPDU数据串

01 Message Type Indicator 0 0 1  n -> ms  RP-DATA (传送方向为基站到手机)
00 Message Reference

RP-Originator Address

复制代码
06 短信中心地址长度
91 号码鉴别,国际格式号码(在前面加‘+’)
33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个
说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000

00 RP-Destination Address  该字段仅包括长度指示符,对于传入信息,没有定义
1E RP-User Data  十六进制占一个字节大小(代表十进制的30),表示TPDU的数据长度
复制代码

TPDU数据串

SMSC Address information

短信中心地址信息,包含目标短信中心地址,06=地址长度,91=号码鉴别,用国际格式号码(在前面加‘+’),33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个

说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000

04 TP-User-Data-Header-Indicator PDU类型:SMS-DELIVER

复制代码
bit1  bit0      Message type
  0    0        SMS-DELIVER (in the direction SC to MS)
  0    0        SMS-DELIVER REPORT (in the direction MS to SC)
  1    0        SMS-ST A TUS-REPORT (in the direction SC to MS)
  1    0        SMS-COMMAND (in the direction MS to SC)
  0    1        SMS-SUBMIT (in the direction MS to SC)
  0    1        SMS-SUBMIT-REPORT (in the direction SC to MS)
  1    1        Reserved
复制代码

TP-Originating-Address

0A 地址长度
91 号码鉴别,国际格式号码(在前面加‘+’)
3316325476 短信发送方号码+3361234567

说简单点就是2位为一组,前后调换,33前后调换为33,16调换为61,32为23,54为45,76为67,连起来就是3361234567

复制代码
00 TP-Protocol-identifier   
00 TP-Data-Coding-Scheme    00表示7-bit编码(英文)、04表示8-bit编码(图片和铃声)、08表示UCS2编码(汉字)
00000000000000 TP-Service-Centre-Time-Stamp    时间戳,此例未设置
05 TP-User-Data-Length        当使用7bit编码,长度就是消息内容字符数(salut=长度为5位)
复制代码

TP-User-Data

F330BB4E07 在这个例子中内容为 salut


openBTS 发送pdu中文短信的问题,简单记录下:sendsmspdu只在openBTS2.6的版本中代码,之后的版本中,已经取消了该部分功能,在CLI目录代码里只实现了sendsms的代码;不自己码代码的情况下,从“华为过360,gsms1800”这类伪BTS系统看“黑产技术牛”写的相关代码可解决。 ​​​​

伪BTS基站系统前端代码分享

链接:https://pan.baidu.com/s/1jJuPIuU 密码:sg92

 
本文转自 K1two2 博客园博客,原文链接:http://www.cnblogs.com/k1two2/p/8315208.html   ,如需转载请自行联系原作者
相关文章
|
人工智能 安全 Apache
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
QwenPaw 是一款开源、本地优先的AI个人智能体(Apache 2.0),数据归属用户、记忆自主进化、支持钉钉/飞书/微信等多端触达。3行命令即可部署,内置Coding IDE、Persona人格、定时任务、MCP工具生态与多Agent协作,真正属于你的私有AI助理。
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
|
6月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
51921 73
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
4月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
3648 3
|
机器学习/深度学习 人工智能 人机交互
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
824 121
|
9月前
|
测试技术 Windows
【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享
本文详解如何使用OpenSSL生成自签名证书链,包括根CA、中间CA和服务器证书,并最终打包为包含私钥的PFX文件,适用于内部系统或测试环境部署,步骤清晰,可复制即用。
946 3
|
10月前
|
人工智能 数据可视化 数据挖掘
2025 年企业 BI 系统搭建指南,适合大型企业的BI产品推荐
2025年,企业数字化转型迈向深水区,数据驱动决策成核心竞争力。本文聚焦瓴羊Quick BI、微软Power BI、Tableau、思迈特Smartbi、永洪Yonghong五大主流BI工具,从背景、功能到案例全面解析,助力企业高效选型与落地应用。
|
网络协议 开发工具 iOS开发
企业微信iPad协议:实例生命周期与零验证码恢复的技术细节
企业微信iPad协议将设备抽象为可编程实例(Guid),通过HTTP通道统一管理创建、登录、恢复与销毁。毫秒级响应替代官方15秒轮询,支持代理复用、零验证码重登、自动保活及资源回收。单节点可承载600并发,P99延迟18ms,适用于高并发群控与会话存档场景。
665 6
|
安全 网络安全 Apache
如何为服务器生成一个TLS证书
通过以上步骤,您可以成功地为服务器生成并配置TLS证书,确保网站的安全性。本文涵盖了从生成私钥、创建CSR、使用自签名证书到获取正式证书的详细步骤,并且对每个步骤进行了详细的解释,使即使是非专业人士也能顺利完成TLS证书的配置。
2047 79
|
安全 Java Shell
Android发送广播时报错:Sending non-protected broadcast xxxxxxx from system xxxxxxxxxx
Android发送广播时报错:Sending non-protected broadcast xxxxxxx from system xxxxxxxxxx
2442 0

热门文章

最新文章