首页 > 其他分享 >sms-pdu TP-User-Data的解析

sms-pdu TP-User-Data的解析

时间:2023-12-03 18:22:23浏览次数:35  
标签:00 01 7bit pdu sms TP User Data

gsm文档 [[23038-i00.docx]]

sms内容--7bit和ucs2编码方式

在3G TS 23.040中,9.2.2 PDU Type repertoire at SM-TL中,有介绍六种类型的SMS,其中五种都有TP-User-Data的域,这部分的呈现也就是我们看到的SMS内容

在3G TS 23.038中,4 SMS Data Coding Scheme中,会记录内容的三种编码方式

  • 7bit
  • 8bit
  • UCS2

8bit编码工作中很少遇到,也比较简单,这里不做说明。

TP-User-Data域的长度是140 octets。这140个字节如果保存7bit信息,最多可以保存160个7bit字符,如果保存UCS2编码,最多可以保存70个字符。

TP-User-Data包含的字符,除了SMS内容外,还有可能在开始的部分包含Header信息(由TP-UDHI来指示是否携带),Header信息占用的部分,是作为SMS控制使用的,不能呈现给用户。

不带Header信息的7bit TP-User-Data

现在我发送一条短消息给手机,内容为I love you.,如果手机接收后是存在SIM卡上的,你可以在SIM的6F3C域(3G TS 11.11 10.5.3 EFsms(Short messages))查看该消息内容:

01 04 81 21 43 F5 00 0B 81 51 28 39 58 71 F1 00 00 21 11 90 50 03 80 00 0B 49 10 FB 6D 2F 83 F2 EF BA 0B

因为是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type来帮助解析:

01 04 81 21 43 F5 00 //前面部分,可不关注,有需要的同学自行研究
0B 81 51 28 39 58 71 F1 //TP-OA,发送SMS的手机号码
00 //TP-PID
00 //TP-DCS, 3G TS 23.038里可以了解这里表示7bit编码方式
21 11 90 50 03 80 00 //TP-SCTS, 时间戳
0B //TP-User-Data-Length,这里为11个字符长度,也就是”I love you.”的字符个数
49 10 FB 6D 2F 83 F2 EF BA 0B //TP-User-Data

对TP-User-Data进行解析,7bit是压缩过的,这里要把11个7bit数据提取出来:

0x49:0100 1001         第一个字符,高位添0,就是0100 1001,0x49,7bit编码表为’I’
0x10:0001 0000         第二个字符,就是0010 0000,0x20,7bit编码表为’ ’
0xFB:1111 1011         第三个字符,就是0110 1100,0x6C,7bit编码表为’l’
0x6D:0110 1101         第四个字符,就是0110 1111,0x6F,7bit编码表为’o’
0x2F:0010 1111         第五个字符,就是0111 0110,0x76,7bit编码表为’v’
0x83:1000 0011         第六个字符,就是0110 0101,0x65,7bit编码表为’e’
0xF2:1111 0010         第七个字符,就是0010 0000,0x20,7bit编码表为’ ’
                       第八个字符,就是0111 1001,0x79,7bit编码表为’y’
0xEF:1110 1111         第九个字符,就是0110 1111,0x6F,7bit编码表为’o’
0xBA:1011 1010         第A个字符,就是0111 0101,0x75,7bit编码表为’u’
0x0B:0000 1011         第B个字符,就是0010 1110,0x2E,7bit编码表为’.’

上面的7bit编码表可以在3G TS 23.038 6.2.1 GSM 7 bit Default Alphabet查阅,看到这里大家就明白了如何把呈现给用户的内容从7bit的PDU数据里解析出来了。

带Header信息的7bit TP-User-Data

01 08 91 68 31 08 20 01 05 F0 44 0D 91 68 51 02 71 82 61 F4 00 D8 21 10 20 71 42 12 00 11 04 01 02 00 01 24 41 EC B7 BD 0C CA BF EB 2E

因为是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type来帮助解析:

01 08 91 68 31 08 20 01 05 F0 //前面部分,可不关注
44 //bit 6表示UDHI,这里bit6为1,则表明TP-User-Data有Header信息
0D 91 68 51 02 71 82 61 F4 //TP-OA
00 //TP-PID
D8 //TP-DCS, 3G TS 23.038里可以了解这里表示7bit编码方式
21 10 20 71 42 12 00 //TP-SCTS, 时间戳
11 //TP-User-Data-Length,这里为17个字符长度
04 01 02 00 01 24 41 EC B7 BD 0C CA BF EB 2E //TP-User-Data

对TP-User-Data进行解析:

04 01 02 00 0104表示Header的长度为4个字节(不包含04本身),这里有5个字节,也就是说TP-User-Data的17个字节,包含了5个字节的Header信息,其余的部分为可呈现给用户的内容。

和上面不带Header信息的7bit TP-User-Data的内容同为”I love you.”,为什么这里除去Header后的TP-User-Data剩余部分,和上面不一致呢?

不带Header的”I love you.” 7bit编码:

49 10 FB 6D 2F 83 F2 EF BA 0B

带Header的”I love you.” 7bit编码:

24 41 EC B7 BD 0C CA BF EB 2E

原因是不带Header,则7bit是从第一个字节的第0位开始填充;而带Header的内容要和早期不允许带Header的7bit编码兼容,那么Header之后的部分,要留给bit位填充0值来padding保证兼容性。这里比较绕口,下面实例解释:

例如:这里Header的总长为5bytes,呈现给用户的数据时从第6bytes开始的,则第6bytes留出的bit位个数为:7 – (5*8%7) = 7 – 5 = 2

也就是说为兼容不带header信息的老版本:那么前面5个字节可以容纳5个7bit数据,并有5个bit位供下一个7bit数据使用,则第6个字节需要留出2bit和前面5bit组成一个7bit数据。

下面解析这部分内容:

0x24:0010 0100         这2个bit为padding位,用0填充
0x41:0010 0001         第一个字符,就是0100 1001,0x49,7bit编码表为’I’
                       第二个字符,就是0010 0000,0x20,7bit编码表为’ ’
0xEC:1110 1100         第三个字符,就是0110 1100,0x6C,7bit编码表为’l’
0xB7:1011 0111         第四个字符,就是0110 1111,0x6F,7bit编码表为’o’
0xBD:1011 1101         第五个字符,就是0111 0110,0x76,7bit编码表为’v’
0x0C:0000 1100         第六个字符,就是0110 0101,0x65,7bit编码表为’e’
0xCA:1100 1010         第七个字符,就是0010 0000,0x20,7bit编码表为’ ’
0xBF:1011 1111         第八个字符,就是0111 1001,0x79,7bit编码表为’y’
0xEB:1110 1011         第九个字符,就是0110 1111,0x6F,7bit编码表为’o’
                       第A个字符,就是0111 0101,0x75,7bit编码表为’u’
0x2E:0010 1110         第B个字符,就是0010 1110,0x2E,7bit编码表为’.’

不带Header信息的UCS2 TP-User-Data

现在我发出一条短消息,内容为”我爱你。”,如果手机接收后是存在SIM卡上的,你可以在SIM的6F3C域(3G TS 11.11 10.5.3 EFsms(Short messages))查看该消息内容:

05 00 11 00 0B 81 51 28 39 58 72 F1 00 08 FF 08 62 11 72 31 4F 60 30 02

因为是接收到的信息,可以用3G TS 23.040 9.2.2.2 SMS-SUBMIT type来帮助解析:

05 00 11 00 //前面部分,可不关注,有需要的同学自行研究
0B 81 51 28 39 58 72 F1 //TP-OA,接收SMS的手机号码
00 //TP-PID
08 //TP-DCS, 3G TS 23.038里可以了解这里表示UCS2编码方式
FF //TP-VP
08 //TP-User-Data-Length,这里为8个字符长度,也就是”我爱你。”的2倍
62 11 72 31 4F 60 30 02 //TP-User-Data
对TP-User-Data进行解析,UCS2两个字节表示一个UCS2字符,组合如下:
0x6211,第一个字符,UCS2为“我”
0x7231,第二个字符,UCS2为“爱”
0x4F60,第三个字符,UCS2为“你”
0x3002,第四个字符,UCS2为“。”

查询Unicode编码(UCS2在这里可等同为Unicode,有一点区别可以网上查询)

带Header信息的UCS2 TP-User-Data

上图用Now SMS发送下面消息给15829385171的手机,最终保存在SIM卡上的数据如下所示:

01 08 91 68 31 08 20 01 05 F0 44 0D 91 68 51 02 71 82 61 F4 00 E8 21 10 20 71 52 22 00 0D 04 01 02 00 01 62 11 72 31 4F 60 30 02

因为是接收到的信息,可以用3G TS 23.040 9.2.2.1 SMS-DELIVER type来帮助解析:

01 08 91 68 31 08 20 01 05 F0 44
0D 91 68 51 02 71 82 61 F4
00
E8 //TP-DCS, 3G TS 23.038里可以了解这里表示UCS2编码方式
21 10 20 71 52 22 00
0D //TP-User-Data-Length,这里为13个字符长度
04 01 02 00 01 62 11 72 31 4F 60 30 02 //TP-User-Data

对TP-User-Data进行解析:

04 01 02 00 01,为Header部分

之后为可呈现给用户的数据部分:

62 11 72 31 4F 60 30 02
0x6211,第一个字符,UCS2为“我”
0x7231,第二个字符,UCS2为“爱”
0x4F60,第三个字符,UCS2为“你”
0x3002,第四个字符,UCS2为“。”

标签:00,01,7bit,pdu,sms,TP,User,Data
From: https://www.cnblogs.com/st17/p/17873527.html

相关文章

  • CentOS7 云服务器上安装 Libmicrohttpd 库
    本周web课的课程作业是实现一个类似top命令的网络服务,用于监控远程服务器的进程,其中使用的web服务器是Libmicrohttpd,于是在此记录下我的下载安装流程,如有错误,欢迎指正!1.LibmicrohttpdLibmicrohttpd是一个小型的C语言库,用于嵌入HTTP服务器功能到应用程序中。它支......
  • CentOS7 无法执行systemctl status ntpd的原因及解决方法
    在CentOS7中,NTP的服务名为ntpd.service,如果出现Unitntpd.servicecouldnotbefound的错误,可能是由于NTP没有安装或未正确启动所致。你可以尝试以下步骤来解决此问题:首先,检查系统是否已经安装NTP。可以运行以下命令:rpm-qntp如果返回packagentpisnotinstall......
  • matplotlib报错:AttributeError: module 'backend_interagg' has no attribute 'Figure
    使用本地python环境可以成功执行importpandasaspdimportmatplotlib.pyplotasplt#设置字体plt.rcParams['font.sans-serif']=['SimHei']#能正确显示负号plt.rcParams['axes.unicode_minus']=False#设置画布大小plt.figure(figsize=(11,8))#柱状图pat......
  • [https @ 000001a69f0bae00] Protocol 'https' not on whitelist 'file,crypto,data'!
    ffmpeg下载视频并合并到一个视频中,执行如下命令:ffmpeg-iindex.m3u8-ccopyresult.mp4出现[https@000001a69f0bae00]Protocol'https'notonwhitelist'file,crypto,data'!问题,详情如下: 因fmpeg默认不使用https协议,https协议没有在白名单内,所以无法下......
  • 连接huggingface.co报错:(MaxRetryError("SOCKSHTTPSConnectionPool(host='huggingface
    参考:https://blog.csdn.net/shizheng_Li/article/details/132942548https://blog.csdn.net/weixin_42209440/article/details/129999962  ============================  随着国际顶级的AI公司广泛使用huggingface.co,现在的huggingface.co已经成了搞AI的不可或缺的一......
  • SMTP操作使用详解并通过python进行smtp邮件发送示例
    转载请注明出处:1.SMTP     SMTP 的全称是“SimpleMailTransferProtocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服......
  • tp6 composer安装workerman报错
    命令:composerrequiretopthink/think-worker错误信息:Problem1-Rootcomposer.jsonrequirestopthink/think-worker^4.0->satisfiablebytopthink/think-worker[v4.0.0].-topthink/think-workerv4.0.0requirestopthink/framework^8.0->foundtopth......
  • 使用样式表和 rcParams字典自定义 Matplotlib属性和样式
    3种方式自定义Matplotlib的属性和样式1.运行时通过rcParams字典动态设置2.使用样式表3. 更改matplotlibrc文件在运行时设置rcParams优先于样式表、样式工作表优先于文件matplotlibrc即1>2>31. 运行时通过rcParams字典动态设置通过字典matplotlib.rcParams,动态修改......
  • rust HTTP客户端reqwest快速入门
    这篇文章主要是收集了reqwest一些常用的代码片段,便于以后直接复制使用,对标之前go语言的net/http客户端的快速入门教程。reqwest版本:0.11.22参考依赖配置:[dependencies]reqwest={version="0.11.22",features=["json","multipart"]}tokio={version="1",features=......
  • Wi-Fi 7大普及来了!TP-LINK连上三款:319元起
    近日随着国内Wi-Fi7认证的推进,小米、华为、新华三等都纷纷上线了Wi-Fi7路由器,已发布的产品也计划推送OTA解锁。不过,之前的不少Wi-Fi7路由器都比较贵,普遍都在500元以上,老牌厂商TP-LINK开始出手打价格了。TP-LINK最新上架了三款Wi-Fi7路由器,分别是BE3600、BE5100和BE6500,三款配置......