摘 要: 结合Android平台的NDK集合,设计及开发了在Android平台上使用SIP协议的软件使之能通过SIP软交换服务器进行通话,并针对性地提出以太网数据包的过滤策略,完善了数据包解析模块,实现了SIP软交换系统的功能扩展。系统将C语言开发的模块全部改用跨平台的Java来编写,较传统的SIP软交换系统而言,其可移植性更强。
关键词: SIP;数据包过滤;Android
传统程控交换使用硬件电路实现硬交换,而软交换是指用软件实现电话交换能力,软交换则采用服务器+软件的形式实现电话的寻号/接续/呼叫流程处理。VoIP(Voice over Internet Protocol)是一种建立在互联网上的数字化或分组化的语音传输技术,会话发起协议(SIP)是VoIP中常用的控制协议。移动互联网时代,移动设备用户可根据需要连接互联网。当今移动设备终端中最流行的操作系统是Android系统,因此,只要在Android系统上开发支持SIP协议的软件,就能够运用VoIP技术实现语音通话。
目前已有的SIP软交换系统的硬件由SIP服务器、网络连接设备(如交换机)和SIP电话机构成,因此存在成本过高、终端设备易损坏、携带不便等缺点,而本研究实现的系统则由SIP服务器、Wi-Fi和智能手机构成。这样使智能手机软件代替了终端设备的电话机,节省了成本,软件实现方面,本系统结合SIP软交换系统和SIP数据包的结构,运用Android系统的软件开发技术实现移动终端设备的语音通话功能,扩展了SIP软交换系统的功能和服务质量[1-2]。
1 系统需求分析
从功能可将系统划分为以下两部分。
(1)服务器功能。服务器是为用户提供信息交换和信息处理而开发的,所以它必须具备信息处理功能和信息交换功能。
(2)Android客户端功能。客户端必须具备连接服务器IP地址的功能、发送语音消息功能以及解析收到的数据并把数据还原为语音消息的功能。
顶层数据流图如图1所示。
2 系统设计
2.1 Proxy Server的运作模式
以图2为例,A(201@192.168.6.5)先送出一个INVITE信息呼叫B(201@192.168.6.3),Proxy Server收到后则进行查询,由查询结果可知目前B实际的地址为202@192.168.6.3,于是Proxy Server便会再以202@192.168.6.3发出INVITE信息,B在回复200 OK时(200表示服务器回送的响应状态码,OK表示请求成功),会将200 OK的Response(响应)传给Proxy Server,再由Proxy Server转送给A。
2.2 Android外线呼叫运作模式
Android外线呼叫运作模式如图3所示。其关键步骤与内线呼叫类似,主要区别步骤在于:F8、F9网关向Proxy回送183 Session Progress响应,表示呼叫已在处理[3]。
2.3 系统可移植性
软件的可移植性是指在一定程度上,软件从一种环境移植到另一种环境后还能正常工作的能力,属于软件质量的范畴,良好的可移植性可延长软件的生命周期。
原有的SIP软交换系统大部分模块均采用跨平台的Java开发,但也有部分模块或局部地区是采用C开发的,如版权认证模块。要实现系统整体的可移植性,最简单的方法就是完全采用Java来开发该系统。
版权认证模块的改良与设计:对于服务器软件,版权认证最重要的就是能试用于多网卡和群服务器,并且认证文件不被篡改、破解,这里使用serial(序列号)+MAC(地址)+max(最大用户数)+expiration(到期日期)+key(许可证密匙)的认证方式,通过license.xml文件来承载认证信息,将license.xml文件传给客户,复制到系统的特定位置,系统启动时通过构造XML解析器来解析license.xml文件核对信息完成认证[4]。
3 数据库设计
3.1 系统E-R图
SIP服务器的实体E-R图如图4所示。
其主要属性如下。(1)Android客户:记录每个连接到服务器的客户端IP地址;(2)IP地址:SIP服务器IP地址;(3)客户端编号:客户端连接服务器后,服务器将分配一个短号给客户端,客户端可通过短号相互呼叫;(4)最大连接数:连接到服务器的客户端最大数量;(5)时间:服务器启动的时间;(6)服务器记录:记录服务器运行信息;(7)网关:拨打外线电话时,需要通过网关。
Android客户端实体E-R图如图5所示。
其主要属性如下。(1)手机IP:每个连入网络的手机都分配唯一的IP地址。(2)服务器地址:SIP服务器IP地址。(3)被寻呼者:记录被呼叫的另外一个客户端别名(编号)。(4)客户端编号:本手机的客户端编号。(5)服务器类型:即SIP服务器。(6)解码编码器:客户端拨打电话时,需要将语音消息编码成二进制代码,而被呼叫的客户端收到信息时需要将二进制代码解码为原来的语音消息。
3.2 数据表的结构
本系统一共使用了47张数据表,由于表与表之间的关系过于复杂,因此只选出其中具有代表性的两张表。注意SIP服务器表和Android客户端的表并没有列出来,以下的两张表足以说明SIP服务器和Android客户端的关系,spm_job表用于保存服务器运行时的信息,id为主键。如表1所示。
t_gw_extension主要用来保存网关信息记录,gw_id为主键,如表2所示。
4 系统运行与测试
4.1 SIP软交换系统健壮性和稳定性运行与测试
在以太网错综复杂的环境下,SIP软交换系统作为服务器软件,必须能稳定运行并对用户提供可靠高效的服务。系统除了能处理正常业务数据,还应该能够及时识别和丢弃以太网中“非法”的无用数据包,即系统本身应该具有数据包的过滤方法与策略。
为研究SIP数据包的格式,本设计抓取某SIP软交换系统服务器网卡收发的SIP协议的数据包。利用网络抓包工具Wireshark(一款免费的网络协议检测程序)。抓取数据包的步骤如下。(1)选取抓获网络设备列表;(2)打开一个接口开始捕获数据包;(3)数据包的过滤设置;(4)捕获数据包;(5)在捕获到所需数据包后,根据需要进行后续工作[5]。
在接收到一个以太网数据帧时,在协议栈的数据从底部启动,同时消除对报文协议报头的层。协议必须检查每一个数据包的协议标识符头,以确定上层协议来接收数据,然后分析可定制的规则事先需要的内容,如数据包的源IP、目的IP和源端口号等,如图6所示。
4.2 SIP数据包的预过滤策略的测试和运行
参照SIP数据包的分析,只有请求消息是SIP终端发向服务器的,即对服务器存在的数据包只可能是请求消息。因而只需要解析请求消息,在服务器正式解析之前提前识别并过滤有可能影响系统正常运行的数据包,保证系统稳定运行[6]。具体步骤如下。
(1)解析前预处理方法:限制“合法”数据包最小长度,小于最小长度的数据包全部丢弃,最小长度应根据实际情况灵活确定。
(2)检索数据是否含有行结束标志CRLF(Windows)或者LF(UNIX/Linux)。
(3)检索Request-Line中是否含有SIP版本信息(如SIP/2.0)。
(4)检索Request-Line中是否包含Method关键字。
(5)检索Request-Line中Request-URI是否符合规定格式。
SIP系统本身也要对正常业务的数据包进行解析,在解析的过程中发现数据包异常并及时丢弃,这样既能保证系统的健壮性,又能节约系统解析这些异常数据包时的开销,保证系统稳定运行的同时也保证了系统的执行效率。服务器接收到的数据包经过滤策略处理后,基本可以过滤掉非SIP数据包,接下来的“非法”数据包应该就是伪SIP包或者是因为某种原因导致失效的SIP数据包,而这一类数据包暂时不必进行过滤,可将其视为正常数据包[7]。运行效果如图7所示。
图7说明SIP软交换系统能抓取所有的网络流量,过滤出SIP消息,测试SIP消息能否能顺利发出。
本研究对SIP软交换系统在Android平台上的实现始终遵循审视问题、分析问题、升华问题、解决问题、总结扩展的方针路线,从软件品质扩展的角度对SIP软交换系统进行改进,系统中采用数据包过滤策略可对服务器软件的维护、网络安全的构筑提供参考和借鉴。而系统硬件则由SIP服务器、Wi-Fi和智能手机构成,可实现中小企业网内智能手机免费通话,同时也可拨打外线电话,可降低企业内通信成本,具有进一步挖掘的市场潜力。
参考文献
[1] 蒋绍林,王金双,张涛,等.Android安全研究综述[J].计算机应用与软件,2012,10(29):205-210.
[2] 吴纲.IP包处理技术浅析与展望[J].计算机与网络,2010,5(3):257-260.
[3] 朱剑锋.基于SIP的IP-PBX呼叫保留功能的实现[J].信息与电脑,2009,9(12):27-31.
[4] 林海泉,杨磊,朱剑锋.SIP软交换系统的版权认证[J].琼州学院学报,2012,9(3):47-53.
[5] 张振刚.移动通信软交换网络安全机制研究[J].网络与通信,2004,6(36):37-41.
[6] 刘应平.局域网异常数据包监控与处理系统的设计[J].电脑开发与运用,2010,9(12):21-25.
[7] 廖永红,李洛,黄战.基于IP包内容的Windows包过滤技术的实现[J].电脑与信息技术,2001,5(3):4-7.