阳离子咪唑啉厂家
免费服务热线

Free service

hotline

010-00000000
阳离子咪唑啉厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

基于Asterisk的VoIP开发指南Asterisk模块编写指南

发布时间:2020-06-30 19:51:29 阅读: 来源:阳离子咪唑啉厂家

(点击放大) 图2 Asterisk PBX呼叫流程

DIUS协议的概述IP-PBX呼叫控制功能,主要是VoIP终端用户的认证计费控制过程,是VoIP系统商业化运营的核心模块。Radius Client端,也叫NAS,主要的任务就是根据VoIP终端的呼叫请求携带的各种属性,包括账户ID、被叫号码、通话时间等,封装成标准的Radius数据包发送到Radius Server端,达到账户信息实时更新的效果。整个NAS端程序主要由两个模块构成:认证模块和计费模块,并把这两个模块整合到开源IP-PBX项目 Asterisk中。5.1 标准RADIUS协议分析 (1)Radius PacketRADIUS数据包被包装在UDP数据报的数据块(Data field))中,其中的目的端口为1812,RADIUS协议包结构如图4所示。

0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Code | Identifier | Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| || Authenticator || || |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Attributes ...(不定长)+-+-+-+-+-+-+-+-+-+-+-+-+-Attribute:0 1 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Type | Length | Value …(不定长) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+图4 RADIUS协议包结构图

(2)对Radius Packet格式各个域解释 Code:包类型,一个字节长,指示RADIUS包的类型,包含不合法的Code的Radius包将被直接丢弃,code域主要包含了以下值类型。1)code=1 Access-Request——认证请求数据包本文AAA功能就是构建code=1的认证请求数据包。2)code=2 Access-Accept——认证响应数据包3) code=3 Access-Reject——认证拒绝数据包4)code=4 Accounting-Request——计费请求数据包本文Asterisk的AAA功能另外一个重点任务就是构建code=4的计费请求数据包,Accounting-Request 数据包中的两种状态类型(Acct-Status-Type)的计费请求数据包:Start(Value=1):Client开始对指定用户提供服务,计费开始;Stop(Value=2):Client停止对指定用户提供服务,计费结束。5)code=5 Accounting-Response——计费响应数据包因为是要更新账户信息,所以目前本文不需要处理计费响应数据包。Identifier:包标识符,一个字节长,用于匹配请求包和响应包,同一组请求包和响应包的Identifier应相同。协议规定:1) 在任何时间,发给同一个RADIUS服务器的不同包的Identifier域不能相同,如果出现相同的情况,RADIUS将认为后一个包是前一个包的拷贝而不对其进行处理。2) Radius针对某个请求包的响应包应与该请求包在Identifier上相匹配(相同)。Length:包长度,两个字节长,说明数据包的长度,是code、identifier、length、authenticator attribute fields的长度总和,有效范围是20~4096,超出范围的数据将被视为附加数据(Padding)或直接被忽略。Authenticator:验证字,16字节长,用于验证消息的负载,对包进行签名,该验证字分为两种。1) 请求验证字---Request Authenticator,用在请求报文中,必须为全局唯一的随机值。2) 响应验证字---Response Authenticator,用在响应报文中,用于鉴别响应报文的合法性。响应验证字=MD5(Code+ID+Length+请求验证字+Attributes+Key)。Attributes:Type指示了Atribute的类型,通用的有几十种,在系统中使用到的,如表4.1所示。Asterisk AAA模块的构建主要是构建表1列出的这些属性值的RADIUS数据包。表1 Atribute的属性列表

属性值

属性名称

属性意义

1

User-Name

用户账户ID

2

User-Password

用户密码

4

Nas-IP-Address

Nas的ip地址

5

Nas-Port

用户接入端口号

6

Service-Type

服务类型

7

Framed-Protocol

协议类型

8

Framed-IP-Address

为用户提供的IP地址

11

Filter-Id

过滤表的名称

27

Session-Timeout

通知NAS该用户可用的会话时长 (时长预付费)

32

NAS-Identifier

标识NAS的字符串

40

Acct-Status-Type

计费请求报文的类型

41

Acct-Delay-Time

Radius客户端发送计费报文耗费的时间

44

Acct-Session-Id

计费会话标识

45

Acct-Authentic

在计费包中标识用户认证通过的方式

46

Acct-Session-Time

通话时长(用户在线时长)

49

Acct-Terminate-Case

用户下线原因

5.2 选择一个合适的Radius Client API上个小节介绍的RADIUS数据包格式,是构建应用协议层数据包的封装所关注的,在Asterisk中如果需要亲自把标准RADIUS数据包的发送、接收等过程从零开始写起,那本文就把重点放在了RADIUS UDP数据包与服务器通信过程的编写中了,实际本文关注的是在Asterisk中根据VoIP通信中的业务需求,构建RADIUS认证计费模块,重点是业务应用层的开发,即如何组织认证包、计费包的数据结构等,而RADIUS数据包传输层直接调用现成的开源API,目前主要有两种这样的开源项目。(1)pam_radius一个PAM模块提供了RADIUS客户端的功能。它是从开源项目Freeradius中提取出来的,如果要使用需要对代码做大量的修改、打补丁后才能使用。(2)radiusclient-ng 相对比PAM的pam_radius模块而言,radiusclient-ng的动态库代码不用修改就可以拿过来使用,只需安装radiusclient-ng的动态库,然后根据配置文件、开放的API接口修改Asterisk代码就可以完成Asterisk AAA模块的构建。所以在本文使用radiusclient-ng开源软件包。

贝高林的Blog

辽宁西装制作

石家庄防静电工作服制作

吉林制作工作服

临沂劳保工服定做