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
此项为短信中心地址, 代表地址长度,=号码鉴别,用国际格式号码(在前面加‘+’),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
短信中心地址信息,包含目标短信中心地址,=地址长度,=号码鉴别,用国际格式号码(在前面加‘+’),33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个
说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000
SMS-SUBMIT first octet 基本参数,不拒绝重复/无有效期/无状态的请求/没有用户数据头/无回复路径
TP-Message Reference
TP-Destination-Address
0A=地址长度(代表十进制的10),91=号码鉴别id=ISDN,=+3361234567 TP-Protocol-identifier
TP-Data-Coding-Scheme 00表示7-bit编码(英文)、04表示8-bit编码(图片和铃声)、08表示UCS2编码(汉字)
AA TP-Validity-Period 有效期4天 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数据串
Message Type Indicator 0 0 1 n -> ms RP-DATA (传送方向为基站到手机)
Message Reference
RP-Originator Address
短信中心地址长度
号码鉴别,国际格式号码(在前面加‘+’)
33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个
说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000 RP-Destination Address 该字段仅包括长度指示符,对于传入信息,没有定义
1E RP-User Data 十六进制占一个字节大小(代表十进制的30),表示TPDU的数据长度
TPDU数据串
SMSC Address information
短信中心地址信息,包含目标短信中心地址,=地址长度,=号码鉴别,用国际格式号码(在前面加‘+’),33010000F0=短信中心号码+331000000,因为长度是9位奇数,最后一个字节的5~8比特会全部置为1所以就是补‘F’凑成偶数个
说简单点就是2位为一组,前后调换33前后调换为33,01调换为10,0000怎么调换都是0,连起来就是3310000000
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 地址长度
号码鉴别,国际格式号码(在前面加‘+’)
短信发送方号码+3361234567
说简单点就是2位为一组,前后调换,33前后调换为33,16调换为61,32为23,54为45,76为67,连起来就是3361234567
TP-Protocol-identifier
TP-Data-Coding-Scheme 00表示7-bit编码(英文)、04表示8-bit编码(图片和铃声)、08表示UCS2编码(汉字)
TP-Service-Centre-Time-Stamp 时间戳,此例未设置
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
SMS PDU编码数据串格式分析的更多相关文章
- Google的Protocol Buffer格式分析
[转]转自:序列化笔记之一:Google的Protocol Buffer格式分析 从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作 ...
- 常见压缩格式分析,及 Linux 下的压缩相关指令
可先浏览加粗部分 一.常见压缩档 *.zip | zip 程式壓縮打包的檔案: (很常见,但是因为不包含文件名编码信息,跨平台可能会乱码) *.rar | winrar 程序压缩打包的档案:(在win ...
- 网易云音乐ncm格式分析以及ncm与mp3格式转换
目录 NCM格式分析 音频知识简介 两种可能 GitHub项目 格式分析 总体结构 密钥问题 代码分析 main函数 导入模块 dump函数 参考资料 代码完整版 转换工具 ncmdump ncmdu ...
- HTTP POST请求报文格式分析与Java实现文件上传
时间 2014-12-11 12:41:43 CSDN博客 原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...
- AAC 格式分析
一直在做一个语音项目,到了测试阶段,近来不是很忙,想把之前做的内容整理一下. 关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia.org/wiki/Advanced_Au ...
- AAC ADTS AAC LATM 格式分析
http://blog.csdn.net/tx3344/article/details/7414543# 目录(?)[-] ADTS是个啥 ADTS内容及结构 将AAC打包成ADTS格式 1.ADTS ...
- .net下二进制序列化的格式分析[转]
.net下二进制序列化的格式分析[转] -- 综合应用 (http://www.Host01.Com/article/Net/00020003/) --- .net下二进制序列化的格式分析 (http ...
- oracle数据库连接串格式
oracle常用链接串格式:jdbc:oracle:thin:@//<host>:<port>/<service_name> jdbc:oracle:thin:@& ...
- bitmap格式分析(转)
源:bitmap格式分析 参考:bitmap图像介绍 最近正在着手开发一个图片库,也就是实现对常见图片格式的度写操作.作为总结与积累,我会把这些图片格式以及加载的实现写在我的Blog上. 说到图片,位 ...
随机推荐
- python-Excel读取-合并单元格读取
python-Excel读取-合并单元格读取(后续会补充python-Excel写入的部分) 1. python读取Excel单元格 代码包含读取Excel中数据,以及出现横向合并单元格,以及竖向合并 ...
- Kotlin 随笔小计
最近准备学Kotlin 现在Kotlin也能支持IOS开发了,准备后面买个Mac也能进行IOS开发 当然目标还是看着能不能把一些小的Android项目重构下 也算是定个目标吧,由于沉迷吃鸡,日志都没怎 ...
- MySQL数据库再回首
前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...
- .net实现网易云音乐下载
客户端版的网易云音乐下载是需要vip的,网页版的虽然可以通过调试工具找到下载链接,但是用起来不是很方便,通过调试工具观察请求发现请求参数都是加密的,比如搜索歌曲的请求参数: 这个加密的实现肯定是写在j ...
- 【Monkey】Monkey获取包名的方式
获取包名的方式: 1.有源码:查看AndroidManifest.xml 2.只有apk: 2.1 aapt dump xmltree ColaBox.apk AndroidManifest.xml ...
- calc属性
在单个元素,或者多个可重复css元素使用, 如width: calc(100% - 100px);此元素宽度等于父级宽度下减100像素
- Django的url控制器
一 url配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.也就是ur ...
- DBUtils——handler
ArrayHandler: 把结果集中的第一行数据转成对象数组. ArrayListHandler: 把结果集中的每一行数据都转成一个对象数组,再存放到List中. BeanHandler: 将结果集 ...
- Cronolog日志分割、定时清理
阿里云发送短信提示服务器磁盘占用到80%警报短信 经过排查发现tomcat日志文件达到10个多G,手动删除过久的日志文件后恢复到50% 但是catalina.out文件还有6个G 解决方法 一.安装C ...
- from jobscrawler_qianchengwuyou.items import JobscrawlerQianchengwuyouItem
-- coding: utf-8 -- import scrapy from jobscrawler_qianchengwuyou.items import JobscrawlerQianchengw ...