短信PDU编码解析
短信PDU编码解析
一 概述
问题:接收飞信或者配合终端发送的长短信(两三百个字)或者接收运营商发送的话费信息,长短信总是接收不完整。其中会有某些段有丢失。
原因分析:
1 手机接收到了,但是拼接错误
这样的结果是多条接收不完整的信息,基本上是可以排除的
2 网络发送了,手机信号问题或者繁忙,碰巧处理不过来
网络端会收不到反馈信息,网络端会再发一条。
3 发送方的信息没全部发送
通过确认发送成功。
4 网络根本就只发送此短信的某一段
无法得知,但此原因的概率最高。
此环境中此问题出现:拔打10086查询话费通话过程中,通过辅助机连续发送了5条长短信和飞信连续发送多条到测试机,
通话结束后查看,有一条手机发的短信显示不完整。
网络出现问题的概率较高,连续性不断发送,造成网络出现问题。
但是仍然要明确确定是不是手机上仅仅接收到此条短信的其中的某几段。通过测试log分析PDU编码。
二 短信PDU编码分析
1 PDU内容:
a0 00 02 00 10 00 00 00 - 19 01 ad 01 09 08 91 68
31 08 70 75 15 f0 00 a0 - 60 0d 91 68 31 62 98 83
25 f4 00 08 21 20 30 61 - 04 25 23 8c 05 00 03 6c
03 01 54 68 5e fa 5e 73 - 00 3a 00 20 30 00 00 32
……
从从第14个字节看起:
08:SMSC地址长度
91:地址类型,国际格式号码(号码前加“+”)
68:中国的国际区号,号码前加 +86
31 08 70 75 15 f0:短信中心地址/号码:字节内反转,13800775510,F补齐长度为偶数。
00 a0 - 60 0d:通常接下来这里都是两个字节,这里怎么是四个??
应该标识以下位:这是条长短信,应该是60标识
其中0d:发送方地址/号码长度 00 a0是干什么的呢?
Bit7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
TP-RP |
TP-UDHI |
TP-SRR |
未用 |
TP-MMS |
TP-MTI |
||
0 |
1 |
1 |
00 |
0 |
00 |
注:TP-UDHI :TP-User-Data-Header-Indicator(用户数据头标示)
0:没有头信息;1:有头信息,头信息格式(在用户数据前面的6个字节)
91 68 31 62 98 83 25 f4:91,86作用同前面,发送方地址/号码:+8613268938524
00 :协议标识TP-PID:普通GSM,点到点方式
08 :编码方式TP-DCS:三种:00表示7-bit编码(英文)、04表示8-bit编码(图片和铃声)、08表示UCS2编码(汉字)
21 20 30 61 - 04 25 23:时间戳TP-SCTS:12/02/03/16:40:52 32时区
8c :短信长度 140 短信内容字节长度,UCS2编码
05 00 03 6c 03 01:记录长短信的标识 非长短信则不带有此信息头
05- 协议长度(后面占5位)
00 表示拆分短信
03 拆分数据的长度(后面的3位)
6c 唯一标识(用于把多条短信合并)
03 共被拆分3条短信
01 序号,这是其中的第1条短信
其余字节:…… 短信内容
上面这个是正常电话号码发送的!
2 10086发送
66 00 02 00 10 00 00 00 - 09 01 73 01 01 08 91 68
31 08 70 75 15 f1 00 66 - 64 05 a1 01 80 f6 00 08 01 80 f6 号码:10086
21 20 30 61 73 33 23 56 - 05 00 03 18 02 02 00 33
5e 74 00 30 00 35 67 08 - 00 30 00 37 65 e5 ff 0c
67 08 7e d3 65 e5 4e 3a - 00 32 00 32 65 e5 ff 0c
60 a8 76 84 20 1c 00 31 - 00 30 52 06 20 1d 6e e1
61 0f ff 0c 62 11 4e ec - 76 84 65 e0 96 50 52 a8
52 9b 30 02 4e 2d 56 fd - 79 fb 52 a8 30 02
……
3 飞信发送
a1 00 02 00 10 00 00 00 - 19 01 ae 01 02 08 91 68
31 08 20 00 75 f1 00 a1 - 60 10 a8 21 25 10 53 29 刚好凑偶数 不用F补齐 号码:1252013592767045
67 07 54 00 08 21 20 30 - 61 24 40 23 8c 05 00 03
78 05 02 80 0c 88 68 73 - b0 51 fa 67 65 76 84 30
02 54 0c 65 f6 ff 0c 51 - 85 57 28 4e 0e 59 16 57
28 76 84 59 51 54 08 4e - 0e 54 8c 8c 10 65 e2 66
……
不同平台发送的信息,PDU编码会有一些不同。