王朝网络
分享
 
 
 

基于Kannel构建SMS网关

王朝other·作者佚名  2006-02-01
宽屏版  字体: |||超大  

基于Kannel构建SMS网关

赵冬路

IEI科技(中国)有限公司

Kannel是Opensource的短信、WAP网关,具有较完整的协议支持能力(http://www.kannel.org)。除了能够支持SMPP等标准短信协议之外,还能够支持GSM Modem等简单、易于获得的短信发送服务。Kannel可以作为任何移动门户内容服务提供商应用基础架构中的一套短信发送基础平台。

利用Kannel适配不同种类型的短信提供商的接口(CMPP, SMPP, GSM Modem, HTTP Interface),同时向移动门户提供的应用系统提供统一的短消息发送接口。

目前Kannel能够运行在Unix架构的服务器上。

本文记录了在SUN Solaris 9上调试安装Kannel的过程,基于WaveCom GSM Modem。

一、安装

1.下载下列软件,并按次序依次安装到Solaris系统中 (利用 “pkgadd –d filename” 命令)

autoconf-2.59-sol9-sparc-local

libiconv-1.8-sol9-sparc-local

bison-1.875d-sol9-sparc-local

libxml2-2.6.16-sol9-sparc-local

make-3.80-sol9-sparc-local

gcc-3.4.2-sol9-sparc-local

可以到http://www.sunfreeware.com下载上述软件。

2. 修改csh环境,确保gcc相关的运行库能够正确找到(Boune Shell的同样应修改.profile文件)

修改/.cshrc文件,在其中添加如下内容:

setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

set path=(/bin /sbin /usr/bin /usr/sbin /usr/dt/bin /usr/openwin/bin /usr/ucb /etc /usr/ccs/bin /usr/local/bin $ORACLE_HOME/bin .)

3. 应用修改后的环境/.cshrc

运行命令 source /.cshrc

4. 解压缩Kannel软件包 (gateway-1.4.0.zip)

运行如下命令:

unzip gateway-1.4.0.zip

5. 做编译前的配置

运行如下命令:

cd gateway-1.4.0;

./configure

6. 编译Kannel软件包

运行如下命令:

Make

7. 安装Kannel软件包

运行如下命令:

make install

安装成功后,Kannel相关的软件保存在/usr/local/sbin路径

二、配置

1.创建配置文件

在/usr/local/sbin目录下创建kannel.conf.gsm文件,内容如下:

#

# Sample configuration file for Kannel bearerbox on Debian.

# See the documentation for explanations of fields.

#

# HTTP administration is disabled by default. Make sure you set the

# password if you enable it.

group = core

admin-port = 13000

admin-password = bar

admin-deny-ip = "*.*.*.*"

admin-allow-ip = "*.*.*.*"

smsbox-port = 13001

wapbox-port = 13002

wdp-interface-name = "*"

log-file = "/var/log/kannel/bearerbox.log"

box-deny-ip = "*.*.*.*"

box-allow-ip = "*.*.*.*"

group = wapbox

bearerbox-host = localhost

log-file = "/var/log/kannel/wapbox.log"

group = smsc

smsc = at

smsc-id = GSMModem

modemtype = auto

device = /dev/ttyb

#device = /dev/modem

speed = 9600

sim-buffering = true

my-number = +86135xxxxxxxx

sms-center = +8613800100500

validityperiod = 168

#pin = 1234

group = modems

id = iTegno

detect-string = "WAVECOM"

detect-string2 = "MODEM"

speed = 9600

need-sleep = false

group = smsbox

bearerbox-host = localhost

sendsms-port = 13013

global-sender = "86135xxxxxxxx "

sendsms-chars = "0123456789 +-"

access-log = "/var/log/kannel/kannel.access"

log-file = "/var/log/kannel/smsbox.log"

log-level = 0

group = sendsms-user

username = foo

password = bar

user-deny-ip = "*.*.*.*"

user-allow-ip = "10.4.*.*;127.0.0.1"

max-messages = 3

concatenation = true

group = sms-service

keyword = default

text = "No service specified"

group = sms-service

keyword = www

get-url = "http://%S";;

group = sms-service

keyword = complex

get-url = "http://host/service?sender=%p&text=%r";;

accept-x-kannel-headers = true

max-messages = 3

注意红色部分的标示,应根据特定的设备类型、移动服务商进行相关的调整。

2. 连接GSM Modem, 并设置串口

将GSM Modem插入SIM卡后连接到串口,我使用SUN Ultra 10, 9针接口对应串口设备/dev/ttyb。

然后运行admintool, 设置串口参数,设定参数如下图所示:

3、启动Kannel SMS服务

分别运行如下命令:

cd /usr/local/sbin

./bearerbox –v 0 /usr/local/sbin/kannel.conf.gsm&

./smsbox –v 0 /usr/local/sbin/kannel.conf.gsm&

注意:在运行bearerbox 应注意相关的调试信息,并注意其中的AT指令。下表为正常的启动日志:

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CSMS: (0,1)

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:35 [6386] [6] INFO: AT2[GSMModem]: Phase 2+ is supported

2005-09-22 14:57:35 [6386] [6] INFO: AT2[GSMModem]: closing device

2005-09-22 14:57:35 [6386] [6] INFO: AT2[GSMModem]: opening device

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: device opened

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: device opened

2005-09-22 14:57:35 [6386] [6] INFO: AT2[GSMModem]: init device

2005-09-22 14:57:35 [6386] [6] INFO: AT2[GSMModem]: speed set to 9600

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: --> ATZ^M

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: --> AT^M

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- AT

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: --> AT&F^M

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- AT&F

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:35 [6386] [6] DEBUG: AT2[GSMModem]: --> ATE0^M

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: <-- ATE0

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+IFC=2,2^M

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CPIN?^M

2005-09-22 14:57:36 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CPIN: READY

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CSCA="+8613800100500"^M

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CMGF=0^M

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CSMS=?^M

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CSMS: (0,1)

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:47 [6386] [6] INFO: AT2[GSMModem]: Phase 2+ is supported

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CSMS=1^M

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CSMS: 1,1,1

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CNMI=1,2,0,1,0^M

2005-09-22 14:57:47 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 14:57:47 [6386] [6] INFO: AT2[GSMModem]: AT SMSC successfully opened.

2005-09-22 14:57:49 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CPMS?^M

2005-09-22 14:57:49 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CPMS: "SM",0,25,"SM",0,25

2005-09-22 14:57:49 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

三、测试

测试方法非常简单,SMSBox提供基于HTTP的短信发送服务,访问如下URL:

http://hostname:13013/cgi-bin/sendsms?username=foo&password=bar&to=138xxxxxxxxx&text=TestingSMS

其中to填写手机号码,text的短信息内容。

提交后,在bearerbox的日志中应出现如下内容:

005-09-22 15:01:47 [6386] [15] DEBUG: boxc_receiver: sms received

2005-09-22 15:01:47 [6386] [15] DEBUG: send_msg: sending msg to box: <127.0.0.1>

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: TP-Validity-Period: 2 days

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: --> AT+CMGS=31^M

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: <-- >

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: send command status: 1

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: --> 0011000B813108316527F90000A81346F9BB3DAD0AAB6CBA3C1C8309B35A2213

2005-09-22 15:01:48 [6386] [6] DEBUG: AT2[GSMModem]: --> ^Z

2005-09-22 15:01:50 [6386] [6] DEBUG: AT2[GSMModem]: <-- >

2005-09-22 15:01:50 [6386] [6] DEBUG: AT2[GSMModem]: <-- +CMGS: 3

2005-09-22 15:01:50 [6386] [6] DEBUG: AT2[GSMModem]: <-- OK

2005-09-22 15:01:50 [6386] [6] DEBUG: AT2[GSMModem]: send command status: 0

四、常用GSM Modem 的AT指令

计算机和GSM引擎之间采用AT指令实现互相之间的通信,因此有必要了解一下AT指令的格式和几条常用的指令。更详细的资料可以参考GSM07.05和GSM07.07规范。

计算机发出的AT指令用来建立通信链路,AT指令集的命令格式帧都以AT开头,下面是几个常用的AT指令。

1.设置短消息中心

AT+CSCA=“+8613800270500”回车(具体的号码由当地的运营商决定。)

2.接收短消息

+CMTI:“SM”,X (X表示接收短消息的SIM卡存储号码)

AT+CMGR=X回车 (从X存储区读短消息)

AT+CMGD=X回车 (从X存储区删除短消息)

3.发送短消息

AT+CMGF=1回车(采用文本格式发送,如用PDU格式,则AT+CMGF=0)

AT+CMGS=“+8613xxxxxxxxx”回车

>输入短消息。Crtl+Z结束并发送。

4.重要的指令

ATZ;E 回车 Echo OFF

ATZ;E1回车 Echo ON

AT+CREG?回车 回答x(X=2脱网,X=1注册,X=0状态不明)

AT+COPS?回车 表示SIM卡是否被网络接受

AT+COPS=?回车 显示所有可用的网络。

5.建立语音呼叫

AT+CREG?回车(是否网络注册)

ATD13xxxxxxxxx;回车(语音呼叫和数据呼叫建立的区别在于号码后所接的分号上)

6.改变并保存参数

AT+IPR=2400 回车(改变RS232口的速率至2400bps)

AT&W 回车 (保存已改参数)

7.输入PIN码

AT+CPIN=“xxxx”

通信链路建立以后,计算机就可以发出信息单元帧了,信息的帧格式如下:

其中标志帧开始的帧头为十六进制的10H和02H,标志信息结束的是10H和03H,最后二位是数据部分按16位求和以后取模的结果,用做校验位。对于数据位,为了避免出现错误的结束标志,规定每出现一个10H码字以后,后面插入一个空字符00H。接收端如果收到信息以后,就要相应地去掉空字符。如果接收端收到的数据部分和BCS部分按照16位相加以后的结果不等于0,就表示传输出现错误,所收到的信息就要丢掉。

四、常用GSM Modem 的AT指令

计算机和GSM引擎之间采用AT指令实现互相之间的通信,因此有必要了解一下AT指令的格式和几条常用的指令。更详细的资料可以参考GSM07.05和GSM07.07规范。

计算机发出的AT指令用来建立通信链路,AT指令集的命令格式帧都以AT开头,下面是几个常用的AT指令。

1.设置短消息中心

AT+CSCA=“+8613800270500”回车(具体的号码由当地的运营商决定。)

2.接收短消息

+CMTI:“SM”,X (X表示接收短消息的SIM卡存储号码)

AT+CMGR=X回车 (从X存储区读短消息)

AT+CMGD=X回车 (从X存储区删除短消息)

3.发送短消息

AT+CMGF=1回车(采用文本格式发送,如用PDU格式,则AT+CMGF=0)

AT+CMGS=“+8613xxxxxxxxx”回车

>输入短消息。Crtl+Z结束并发送。

4.重要的指令

ATZ;E 回车 Echo OFF

ATZ;E1回车 Echo ON

AT+CREG?回车 回答x(X=2脱网,X=1注册,X=0状态不明)

AT+COPS?回车 表示SIM卡是否被网络接受

AT+COPS=?回车 显示所有可用的网络。

5.建立语音呼叫

AT+CREG?回车(是否网络注册)

ATD13xxxxxxxxx;回车(语音呼叫和数据呼叫建立的区别在于号码后所接的分号上)

6.改变并保存参数

AT+IPR=2400 回车(改变RS232口的速率至2400bps)

AT&W 回车 (保存已改参数)

7.输入PIN码

AT+CPIN=“xxxx”

通信链路建立以后,计算机就可以发出信息单元帧了,信息的帧格式如下:

其中标志帧开始的帧头为十六进制的10H和02H,标志信息结束的是10H和03H,最后二位是数据部分按16位求和以后取模的结果,用做校验位。对于数据位,为了避免出现错误的结束标志,规定每出现一个10H码字以后,后面插入一个空字符00H。接收端如果收到信息以后,就要相应地去掉空字符。如果接收端收到的数据部分和BCS部分按照16位相加以后的结果不等于0,就表示传输出现错误,所收到的信息就要丢掉。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有