基于Kannel构建SMS网关

基于Kannel构建SMS网关

赵冬路

IEI科技(中国)有限公司

 

 

KannelOpensource的短信、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]: --> 0011000B 813108316527F 90000A 81346F9BB3DAD0AAB6CBA 3C 1C8309B 35A2213

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,就表示传输出现错误,所收到的信息就要丢掉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值