分享

短信开发基础知识以及短信猫发短信wappush短信.

 hh3755 2011-09-07

1.1. 基本知识

短信开发指通过串口 at 命令驱动短信进行短信发送和接收操作。

 java  主要使用 javax.comm 包进行开发,

sun 公司网上地址  http://java./products/javacomm/

使用工具  windows 自带超级终端

 

短信操作分为三种模式 block,pdu  Text

短信传送有三种编码 7 位, 8 位, UniCode

at 命令 ,at 命令是驱动短信设备的标准工业命令,除了业界的标准之外,每个厂商可能会对其进行扩展,不过一般来说,标准命令应该够用,这次用的是西门子 tc35i ,有专门的 at 命令文档。

 

 

1.1.1.     相关文档

Gsm03.38 规范: Alphabets and language-specific information 着重介绍短信发送中对字符集的控制部分

Gsm03.40 规范: Technical realization of the Short Message Service (SMS) Point-to-Point (PP) 详细介绍各种不同短信的不同实现

Gsm07.05 规范: Use of Data Terminal Equipment - Data Circuit terminating;Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS) ,介绍 at 的一些控制命令。

Gsm07.07 规范:着重介绍 at 的短信相关命令,可以说是 at  sms 规范。

1.1.2.     Block 模式

Block 模式基本已经被 pdu 模式取代,没有具体研究

1.1.3.     Text 模式

Text 模式比较简单,但是支持的设备不是很全,而且对于中文似乎有些问题,在金笛的网站技术资料中似乎提到了一句不能实现中文。

AT  CGMF=1<CR>

AT  CGMS=  13605696031  ,129<CR> 
>Hello World!<^Z>

1.1.4.     Pdu 模式

pdu 编码主要包括两个主要的部分,一是 pdu 串的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 pdu 中文本部分的编码,分别因为字符集而不同。

我们也可以这样来理解这个 pdu 编码的格式, sms 相当于一个协议栈,最简单的协议栈:

根据 gsm03.40 规范, sms 协议包括以下几层:

1、  SM-AL :应用层。这个部分就是数据部分。

2、  SM-TL :传输层。我们可以清楚的看到这里描述了主要的短信内容,包括发送号码,接收号码,信息类型,编码,数据报长度等等,这也是我们编程主要要面对的问题。

3、  SM-RL :中继层。这个指的是短信在网关之间中继需要的协议。

4、  SM-LL: 链路层。

从上述描述中我们可以清楚的看到,我们编程主要集中于传输层。

 

PDU 串的用户信息 (TP-UD) 段最大容量是 140 字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是 160  140  70 。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

 

1.2. SMS 用户数据的编码方法

1.2.1.     英文 7 位编码

 

图片不能正确显示

这是
 gsm 的默认编码方式

由于这样的移位,我们可以看到我们能发的最多英文字符等于: 140*8/7 = 160 

1.2.2.     数据 8 位编码

8-bit 编码通常用于发送数据消息,比如图片和铃声等;

1.2.3.     中文 pdu 编码

发送中文时,必须用 UCS2  utf-16 )进行编码,最多可以发 140/2  70 个汉字。

UniCode 编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”, UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全 00 ,以保证一个字符对应两个字节。

1.2.4.     Wap-push 中的中文编码

 wap-push 短信的时候有些问题了,开始的时候也按照 Unicode 编码处理,总是失败,后来才发现,有个编码字段设为了 uft-8 ,所以在这种情况下,还是可以出现其他编码方式的。

 

1.3. 短信报头分析

1.3.1.     短信类型

详细请参考 gsm 0438 规范和 gsm0440 规范,里面有详细的关于各种短消息类型的描述。

 sms 中到底支持多少种类型的短信,短信类型由什么进行控制,这是我们在这里需要着重介绍的问题。

在传输层来分,一共有六大短信类型: SMS-DELIVER  SMS-DELIVER-REPORT  SMS-SUBMIT

 SMS-SUBMIT-REPORT  SMS-STATUS-REPORT  SMS-COMMAND ,这六种短信类型,由短信中心地址后的第一个字节的最低两位控制。

 

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-STATUS-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

 

也就是说,每个短信在短信中心地址之后的第一个字节的最低两位是至关重要的。他决定了如何读这条短信(结合是发送的,还是接收的)

1.3.2.    地址编码

短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的 , 简单来说就是 BCD8421编码

如: 08 91 683108501505F 0 

08 :地址长度,(号码类型 + 号码长度) /2 的十六进制表示

91 :号码类型

683108501505F 0 :号码,实际号码应为: 8613805515500 ,号码处理方法为 , 如果为 +86 开始 ,  + 号去掉 ,然后判断是否为偶数 , 不是在末尾补 F, 然后将奇数位和偶数位互换

1.3.3.     TP-DCS( 数据编码格式 )

这个字节比较特殊,表明整个短信的字符编码,数据内容等信息。详细说明参考 gsm03.38 规范。

1.3.4.     第一个字节

Pdu 编码的第一个字节比较有意思,这个字节会根据六种不同的短信按位有不同的意思,拿句专业一点的话来说,叫bitmask. 用图来大概描述一下,详细参考 gsm0340  9.2.3 段。

 

 

位数

MSG_Deliever

MSG_SUBMIT

7

TP_RP (回复地址)

TP_RP

6

TP_UDHI (数据报头)

TP_UDHI

5

TP_SRI (需要回复)

TP_SRR (请求回复)

4

 

TP_VPF( 时间格式 )

3

 

2

TP_MMS (多条短信标志, 1为无, 0 为有)

TP_RD( 拒绝重复标志 )

1  0

TP_MTI (短信类型)

TP_MTI

常见值

04 ,正常收到, 44 ,有报头短信

11 ,正常发送, 51 ,有报头短信

1.3.5.     TP-PID (协议标识)

在这个里面还有一个字节比较特殊,就是协议标识。

一般都是 00 ,表示点到点的标准短信。

1.3.6.     超长短信

参考 gsm0340  9.2.3 .24TP_UD 部分,这个部分中间的一种情况就是描述超长短信的处理。

长短信关键涉及一个数据报头的问题,数据报头由“长度”和多个“数据元素”组成。

1.3.7.     Wap-push 短信

WAP 的推送协议中定义了服务指示( SI  Service Indication )和服务加载( SL  Service Load )两项服务,以给用户和网络运营者更多的选择。服务指示是将新信息的指示和相关的通用资源标识符( URI )推送给用户,由用户选择是立即处理信息还是以后处理。服务加载是将一项服务的 URI 推送给用户,然后客户端自动地使用 PULL 技术根据该 URI 启动服务。两种服务的区别在于用户是否介入推送信息的处理过程。 SL 对推送信息的处理对用户来说是透明的,而 SI 则在指示用户的同时,请用户对随后的处理做出选择。 
PUSH
 可以将某一站点或某一业务的链接通过短信发送到支持 WAP PUSH 功能的手机上,这样用户只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此, WAP PUSH 实现了短信和 WAP 业务的结合,节省了用户寻找业务的时间,方便用户直接找到并使用自己喜欢的业务。

Wap-push 短信的核心不同之处就在于:

1、  含有数据报头,也就是 TP_UDHI 位为 1 ,一般来说 pdu 的第一个字节发送时为 51 ,接收时为 44 

2、  TP_DSC 字节不同,一般为 F5 ,表明字符集为 8 位,短信类型为 Class 1; 详细解释参看 gsm03.38 的第四章。

1.4. 编码示例

1.4.1.     发送信息的 PDU 串:

用手机写一条短信息,发送手机号码为 13605696031 ,信息内容为“ Hello World! ”。通过执行 AT  CMGL=2 可以读出此条信息。

 

AT  CMGL=2 { 读未发短信息 
 CMGL: 1,2,,24 {1 表示信息个数, 2 表示未发信息, 24 表示信息总容量 
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000FF 0B E8329BFD06DDDF723619 
OK

 

下面分析这条信息:

 

08

短信息中心地址长度。(短信息中心号码类型 + 短信息中心号码长度 /2 的十六进制表示)

91

短信息中心号码类型, 91  TON/NPI  TON/NPI 遵守International/E.164 标准,指在号码前需加‘+’号 ; 此外还可有其他数值,但 91 最常用。

683108501505F 0

短信息中心号码,是所使用的服务中心地址。由于位置上略有处理,实际号码应为: 8613805515500( 字母 F 意指长度减1), 这是作者所在地 GSM 短信息中心的号码。 ( 号码处理方法为 , 如果为 +86 开始 ,  + 号去掉 , 然后判断是否为偶数 , 不是在末尾补 F, 然后将奇数位和偶数位互换 )

11

文件头字节 (header byte, 是一种 bitmask) 。这里 11 指正常地发送短信息。

00

信息参考号。( TP-MR 

0D

被叫号码长度。被叫号码长度的十六进制表示。

81

被叫号码类型。

3106656930F 1

被叫号码,也经过了移位处理,实际号码为 13605696031 

00

协议标识 (TP-PID), 是普通 GSM 类型,点到点方式

00

用户信息编码方式 (TP-DCS) , 7-bit 编码( 08  UCS2 编码)

FF

有效期 (TP-VP), 短信的有效时间

0B

短信息长度

E8329BFD06DDDF723619

短信息内容“ Hello World! ”。

1.4.2.     接受信息的 PDU 

读取以上发送出来的



短信猫发WAPpush短信:

http://xjbclz./article/xjbclz-9-943385.html
点到点短信WAPPUSH研究总结
 
1、  在短信群发器里面插入移动的SIM卡,插上电源,并将群发器连接到串口上。
2、  点击开始菜单》程序》附件》通讯》超级终端,新建一个连接,例如取名为SMS,如图一所示

图一
点击确定,选择连接群发器的串口,如图二所示

图二
点击确定,在弹出的对话框中选择每秒位数9600(这个值因不同的群发器而有所不同,可以在4800,9600,19200这几个值中试试看那个是对的),其他不要动,。如图三
 

图三
点击确定。在超级终端的窗口中输入at,如果出现OK说明连接成功。
3、  依次输入:
 
at+cmgf=0回车
at+cmgs=99回车
0051000BA13119907311F000F5A7550B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C0333672E6C6574762E636E2F000103E782B9E587BBE8BF9BE585A5E4B990E8A786E7A7BBE58AA8E4BCA0E5AA923347E997A8E688B7000101再按ctrl+z
 
如图四所示:

图四
 
这时13910937110的手机就会收到一条短信,标题为“点击进入乐视移动传媒3G门户”,内容是一个链接,连接地址是http://3g./
 
4、  下面解析一下:
at+cmgf=0的意思是设置短信发送格式为pdu格式。
at+cmgs=99的意思是发送一条短信,短信的总的长度(包括头部和内容)是99+1个字节(为什么是99+1个字节,而不是99个字节我也不清楚)。
下面的
0051000BA13119907311F000F5A7550B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C0333672E6C6574762E636E2F000103E782B9E587BBE8BF9BE585A5E4B990E8A786E7A7BBE58AA8E4BCA0E5AA923347E997A8E688B7000101
就是短信的内容的,他是十六进制的编码,一个字节用两个十六进制字符表示。我们可以把它分成两部分,一部分是短信头部,他们是前面的30个字节,即
0051000BA13119907311F000F5A755
我们把它分成几段来解析
0051000BA1这一段是死的,我们不用管它。
3119907311F0这一段是手机号码,它的编码是这样的,在手机号码后面加一个F,然后两位两位倒过来写,例如3119907311F0表示的手机号码是13910937110
00F5A7这一段是死的,我们不用管它。
55 表示短信内容部分的字节数。用十六进制表示,例如55表示内容部分为85个字节。
至此,短信头部结束,后面是短信的内容部分
0B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C0333672E6C6574762E636E2F000103E782B9E587BBE8BF9BE585A5E4B990E8A786E7A7BBE58AA8E4BCA0E5AA923347E997A8E688B7000101
我们也把它分成几段来解析
0B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C03这一段是死的,我们不用管它。
33672E6C6574762E636E2F表示的是链接的地址的http://后面的部分,这里实际上是“3g./”他是UTF-8编码。
 000103这一段是死的,我们不用管它
E782B9E587BBE8BF9BE585A5E4B990E8A786E7A7BBE58AA8E4BCA0E5AA923347E997A8E688B7这一段是短信的标题部分,用UTF-8编码。
000101这一段是死的,我们不用管它
 
注:获得一个字符串的UTF-8编码的十六进制表示的方法很简单,在记事本里面编辑,保存的时候选择编码方式为utf-8,然后用hexedit打开,去掉前面三个字节,将后面的字节的十六进制拷出来就行了。
 
5、附录,下面对上面说的那几个死的段落进行一些解析:
a、  头部0051000BA1段的解析
00 SMSC地址信息的长度,00表示不用设置SMSC地址,即用手机上设置短信中心号码。
51 基本参数(TP-MTI/VFP) 不要求发送回复
00 消息基准值(TP-MR)
0B 对方电话的长度(即11位电话,一般的手机都是11位)
A1 目标地址格式 A1表示为国内格式
b、  头部00F5A7段的解析
00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
F5 用户信息编码方式 (TP-DCS)
A7 有效期(TP-VP)
c、  内容部分0B05040B8423F0000303010129060603AE81EA8DCA02056A0045C6080C03段的解析
0B WAP PUSH头部的总长度
05040B8423F0表示接下来是一个WAP PUSH
00 表示是Concatenated Short Messages
03 长度
03 reference number
01 表示分成1个短信发送
01 当前包的序号
29060603AE81EA8DCA WSP
02 标记位
05 -//WAPFORUM//DTD SI 1.0//EN
6A UTF-8
00 标记开始
45
C6
08
0C href="http://
03 字符串开始
d、内容部分000103这一段的解析
00 URL 字符串结束  
01 >
03 标题字符串开始
e、内容部分000101这一段的解析
00 内容描述字符串结束
01   
01
6、编码工具的使用
WAPPUSH编码.html是我写的一个编码工具,双击以后,输入手机号码,地址内容,标题内容,点击编码,自动获得编码内容,将编码内容拷贝到超级终端运行即可。如图:

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多