SMS¶
Unicode¶
UTF-8¶
- 对单字节,高位设为
0
, 后面7 bit为该符号的Unicode - 对
n(n>1)
字节的字符,第一个字节的前n
位设为1
,n+1
位为0
,后面字节的前两位均为10
,余下部分为该字符的Unicode
Unicode符号范围(hex) | UTF-8编码方式(binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
举例¶
字符 | Unicode | UTF-8 |
---|---|---|
A | U+0041 | 41 |
0 | U+0030 | 30 |
你 | U+4f60 | E4BDA0 |
饕 | U+9955 | E9A595 |
PDU mode¶
短信收发分text
, PDU
两种模式, 本文仅考虑PDU
模式。 参考收发短信的PDU格式1,总结主要内容如下。
名词解释¶
元素 | 名称 | 描述 |
---|---|---|
GSM | Global System for Mobile Communications | 全球移动通信系统 |
SMS | Short Message Service | 短信服务 |
SMSC | Short Message Service Center | 短信服务中心 |
PDU | Protocol Data Unit | 协议数据单元 |
RP | Reply Path | 应答路径 |
UDHI | User Data Header Indicator | 用户数据头标识 |
SRR | Status Report Request | 状态报告请求 |
SRI | Status Report Indication | 状态报告指示 |
RD | Reject Duplicate | 拒绝副本 |
MTI | Message Type Indicator | 信息类型指示 |
MR | Message Reference | 所有成功的SMS-SUBMIT参考数目 |
TON | Type of number | 号码类型 |
SCA | Service Center Address | 服务中心地址 |
OA | Original Address | 发送方地址(手机号码) |
DA | Destination Address | 接收方地址(手机号码) |
PID | Protocol Identify | 协议类型 |
DCS | Data coding scheme | 数据编码策略 |
VP | Validity Period | 消息在SMSC的有效期 |
VPF | Validity Period Format | 有效期格式 |
SCTS | Service Center Timestamp | 时间戳 |
UD | User Data | 用户数据 |
UDL | User Data Length | 用户数据长度 |
短信收发格式¶
发送短信
接收短信
SCA¶
SCA长度 | SCA类型 | SCA地址 |
---|---|---|
1 Octet | 0-1 Octet | 0-10 Octet |
08 | 91 | 683108200115F1 |
- SCA 长度:SCA类型与SCA地址的总长度
- SCA 类型:TON/NPI,
0x91
最常用 - SCA 地址:依照ISDN编号方式(
+8613800210511
,13800210511
,123456
)
TON(type of number)
- International:
91
- National:
A1
- Unkown:
81
PDU Type¶
第一个8位位组,发送和接收的格式略有不同。
- 发送格式:SMS-SUBMIT
7 | 6 | 5 | 4 3 | 2 | 1 0 |
---|---|---|---|---|---|
RP | UDHI | SRR | VPF | RD | MTI |
0 | 0 | 1 | 10 | 0 | 01 |
- 接收格式:SMS-DELIVER
7 | 6 | 5 | 4 3 | 2 | 1 0 |
---|---|---|---|---|---|
RP | UDHI | SRI | MMS | MTI | |
0 | 0 | 0 | 00 | 1 | 00 |
这里比较关键的参数是UDHI
,用户数据头部标识,为1代表该短信是长短信,被分为多条短信发送,用户数据部分包含头部信息。
DCS¶
DCS(Data coding scheme)
- 7-bit:
00
- 8-bit:
F4
- UCS2:
08
接收短信¶
使用手机向带有SIM卡的LBR1020
发送一条长短信:
生僻字
(滟灪爩鱻麤龖龗齾齉靐龘)拼音如下: 【汉语拼音】滟(yàn) 灪(yù) 爩(yù) 鱻(xiǎn) 麤(cū) 龖(dá) 龗(línɡ) 齾(yà) 齉(nànɡ) 靐(bìnɡ) 龘(dá)
通过mbctrl.sh --show-message
获取SIM卡的短信列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
soap 测试¶
使用 SOAP Sender 发送WAN3GinterfaceConfig:1#GetSMSInfo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|
收到的PDU信息以及解码后信息如下,长短信会被分批发送,类似IP分片。
unicode:
part 1: FF086EDF706A72299C7B9EA49F969F979F7E9F4997509F98FF0962FC97F359824E0BFF1A000A30106C498BED62FC97F330116EDF0028007900E0006E00290020706A0028007900F90029002072290028007900F9002900209C7B00280078006901CE006E002900209EA400280063016B002900209F960028006400E1002900209F970028006C
part 2: 00ED006E0261002900209F7E0028007900E0002900209F490028006E00E0006E02610029002097500028006200EC006E0261002900209F980028006400E10029
utf-16 decode:
part 1: (滟灪爩鱻麤龖龗齾齉靐龘)拼音如下: 【汉语拼音】滟(yàn) 灪(yù) 爩(yù) 鱻(xiǎn) 麤(cū) 龖(dá) 龗(l
part 2: ínɡ) 齾(yà) 齉(nànɡ) 靐(bìnɡ) 龘(dá)
PDU 解析¶
针对测试用例,参考短信实用手册2,下面进行详细解释:
Analysis received PDU
0891683108200115F1640BA17105611983F40008026021514111238C0500035A0201FF086EDF706A72299C7B9EA49F969F979F7E9F4997509F98FF0962FC97F359824E0BFF1A000A30106C498BED62FC97F330116EDF0028007900E0006E00290020706A0028007900F90029002072290028007900F9002900209C7B00280078006901CE006E002900209EA400280063016B002900209F960028006400E1002900209F970028006C
---
SCA: 08 91 683108200115F1
PDU Header: 64
TP-OA: 0B A1 7105611983F4
TP-PID: 00
TP-DCS: 08
TP-SCTS: 02602151411123
TP-UDL: 8C
Data header: 0500035A 0201
TP-UD: FF086EDF706A72299C7B9EA49F969F979F7E9F4997509F98FF0962FC97F359824E0BFF1A000A30106C498BED62FC97F330116EDF0028007900E0006E00290020706A0028007900F90029002072290028007900F9002900209C7B00280078006901CE006E002900209EA400280063016B002900209F960028006400E1002900209F970028006C
---
08 91 68 31 08 20 01 15 F1
08: SMSC地址信息的长度,8个字节(含格式信息)
91: SMSC地址格式 国际格式
68 31 08 20 01 15 F1: 接收方SMSC地址 +8613800210511,补`F`凑成整数
-
64
: SMS-DELIVER消息的第一个字节RP UDHI SRI _ _ MMS MTI
0 1 1 0 0 1 00
- RP: 0, 应答路径未设置
- UDHI: 1, 用户数据包含头信息
- SRI: 1, 状态报告将返回给短消息实体(SME)
- MSS: 1, 在SMSC中没有更多信息等待MS
- MTI: 00, 信息类型指示 SMS-DELIVER(SMS->MS)
-
0B A1 71 05 61 19 83 F4
0B: 发送方地址长度, 11
A1: 发送方地址格式,国内格式
71 05 61 19 83 F4: 发送方地址, 17501691384, 补`F`凑成整数
-
00
: 协议标识, GSM类型,点到点方式TP-DCS
-
08
: 用户信息编码方式, UCS2TP-SCTS
-
02 60 21 51 41 11 23
: 时间戳,2020-06-12 15:14:11 +32
TP-UDL
-
8C
: 用户数据长度, 当前字节往后(不含8C
)的数据长度,如果有分片仅计算本批数据TP-UD
-
05 00 03 5A 02 01
: 短信头部05: 数据头部剩余5个字节
00: 长短信,8位的参考标识
03: 数据头部剩余3个字节
5A: 这批短信的唯一参考标识
02: 这批短信的数量,该长短信被分为2条
01: 本条短信是长短信中的第1条
FF08...
: TP-UD, 余下都是短信信息