欧美,精品,综合,亚洲,好吊妞视频免新费观看,免费观看三级吃奶,一级a片女人自慰免费看

 首頁(yè) > 技術(shù) > 技術(shù)文摘 > 基于Asterisk的VoIP開(kāi)發(fā)指南—Asterisk模塊編寫指南

基于Asterisk的VoIP開(kāi)發(fā)指南—Asterisk模塊編寫指南

2008-06-12 00:00:00   作者:   來(lái)源:   評(píng)論:0 點(diǎn)擊:






(點(diǎn)擊放大

圖2 Asterisk PBX呼叫流程

4.RADIUS協(xié)議的概述


  IP-PBX呼叫控制功能,主要是VoIP終端用戶的認(rèn)證計(jì)費(fèi)控制過(guò)程,是VoIP系統(tǒng)商業(yè)化運(yùn)營(yíng)的核心模塊。

  Radius Client端,也叫NAS,主要的任務(wù)就是根據(jù)VoIP終端的呼叫請(qǐng)求攜帶的各種屬性,包括賬戶ID、被叫號(hào)碼、通話時(shí)間等,封裝成標(biāo)準(zhǔn)的Radius數(shù)據(jù)包發(fā)送到Radius Server端,達(dá)到賬戶信息實(shí)時(shí)更新的效果。整個(gè)NAS端程序主要由兩個(gè)模塊構(gòu)成:認(rèn)證模塊和計(jì)費(fèi)模塊,并把這兩個(gè)模塊整合到開(kāi)源IP-PBX項(xiàng)目 Asterisk中。

  5.1 標(biāo)準(zhǔn)RADIUS協(xié)議分析

 。1)Radius Packet

  RADIUS數(shù)據(jù)包被包裝在UDP數(shù)據(jù)報(bào)的數(shù)據(jù)塊(Data field))中,其中的目的端口為1812,RADIUS協(xié)議包結(jié)構(gòu)如圖4所示。

0 1 2 3

0 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 ...(不定長(zhǎng))

+-+-+-+-+-+-+-+-+-+-+-+-+-



  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 …(不定長(zhǎng))

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

圖4 RADIUS協(xié)議包結(jié)構(gòu)圖

  (2)對(duì)Radius Packet格式各個(gè)域解釋

  Code:包類型,一個(gè)字節(jié)長(zhǎng),指示RADIUS包的類型,包含不合法的Code的Radius包將被直接丟棄,code域主要包含了以下值類型。

  1)code=1 Access-Request——認(rèn)證請(qǐng)求數(shù)據(jù)包

  本文AAA功能就是構(gòu)建code=1的認(rèn)證請(qǐng)求數(shù)據(jù)包。

  2)code=2 Access-Accept——認(rèn)證響應(yīng)數(shù)據(jù)包

  3) code=3 Access-Reject——認(rèn)證拒絕數(shù)據(jù)包

  4)code=4 Accounting-Request——計(jì)費(fèi)請(qǐng)求數(shù)據(jù)包

  本文Asterisk的AAA功能另外一個(gè)重點(diǎn)任務(wù)就是構(gòu)建code=4的計(jì)費(fèi)請(qǐng)求數(shù)據(jù)包,Accounting-Request 數(shù)據(jù)包中的兩種狀態(tài)類型(Acct-Status-Type)的計(jì)費(fèi)請(qǐng)求數(shù)據(jù)包:Start(Value=1):Client開(kāi)始對(duì)指定用戶提供服務(wù),計(jì)費(fèi)開(kāi)始;Stop(Value=2):Client停止對(duì)指定用戶提供服務(wù),計(jì)費(fèi)結(jié)束。

  5)code=5 Accounting-Response——計(jì)費(fèi)響應(yīng)數(shù)據(jù)包

  因?yàn)槭且沦~戶信息,所以目前本文不需要處理計(jì)費(fèi)響應(yīng)數(shù)據(jù)包。

  Identifier:包標(biāo)識(shí)符,一個(gè)字節(jié)長(zhǎng),用于匹配請(qǐng)求包和響應(yīng)包,同一組請(qǐng)求包和響應(yīng)包的Identifier應(yīng)相同。協(xié)議規(guī)定:

  1) 在任何時(shí)間,發(fā)給同一個(gè)RADIUS服務(wù)器的不同包的Identifier域不能相同,如果出現(xiàn)相同的情況,RADIUS將認(rèn)為后一個(gè)包是前一個(gè)包的拷貝而不對(duì)其進(jìn)行處理。

  2) Radius針對(duì)某個(gè)請(qǐng)求包的響應(yīng)包應(yīng)與該請(qǐng)求包在Identifier上相匹配(相同)。

  Length:包長(zhǎng)度,兩個(gè)字節(jié)長(zhǎng),說(shuō)明數(shù)據(jù)包的長(zhǎng)度,是code、identifier、length、authenticator attribute fields的長(zhǎng)度總和,有效范圍是20~4096,超出范圍的數(shù)據(jù)將被視為附加數(shù)據(jù)(Padding)或直接被忽略。

  Authenticator:驗(yàn)證字,16字節(jié)長(zhǎng),用于驗(yàn)證消息的負(fù)載,對(duì)包進(jìn)行簽名,該驗(yàn)證字分為兩種。

  1) 請(qǐng)求驗(yàn)證字---Request Authenticator,用在請(qǐng)求報(bào)文中,必須為全局唯一的隨機(jī)值。

  2) 響應(yīng)驗(yàn)證字---Response Authenticator,用在響應(yīng)報(bào)文中,用于鑒別響應(yīng)報(bào)文的合法性。響應(yīng)驗(yàn)證字=MD5(Code+ID+Length+請(qǐng)求驗(yàn)證字+Attributes+Key)。

  Attributes:Type指示了Atribute的類型,通用的有幾十種,在系統(tǒng)中使用到的,如表4.1所示。Asterisk AAA模塊的構(gòu)建主要是構(gòu)建表1列出的這些屬性值的RADIUS數(shù)據(jù)包。

  表1 Atribute的屬性列表

屬性意義

用戶賬戶ID

用戶密碼

Nasip地址

用戶接入端口號(hào)

服務(wù)類型

協(xié)議類型

為用戶提供的IP地址

過(guò)濾表的名稱

通知NAS該用戶可用的會(huì)話時(shí)長(zhǎng) (時(shí)長(zhǎng)預(yù)付費(fèi))

標(biāo)識(shí)NAS的字符串

計(jì)費(fèi)請(qǐng)求報(bào)文的類型

Radius客戶端發(fā)送計(jì)費(fèi)報(bào)文耗費(fèi)的時(shí)間

計(jì)費(fèi)會(huì)話標(biāo)識(shí)

在計(jì)費(fèi)包中標(biāo)識(shí)用戶認(rèn)證通過(guò)的方式

通話時(shí)長(zhǎng)(用戶在線時(shí)長(zhǎng))

用戶下線原因

  5.2 選擇一個(gè)合適的Radius Client API

  上個(gè)小節(jié)介紹的RADIUS數(shù)據(jù)包格式,是構(gòu)建應(yīng)用協(xié)議層數(shù)據(jù)包的封裝所關(guān)注的,在Asterisk中如果需要親自把標(biāo)準(zhǔn)RADIUS數(shù)據(jù)包的發(fā)送、接收等過(guò)程從零開(kāi)始寫起,那本文就把重點(diǎn)放在了RADIUS UDP數(shù)據(jù)包與服務(wù)器通信過(guò)程的編寫中了,實(shí)際本文關(guān)注的是在Asterisk中根據(jù)VoIP通信中的業(yè)務(wù)需求,構(gòu)建RADIUS認(rèn)證計(jì)費(fèi)模塊,重點(diǎn)是業(yè)務(wù)應(yīng)用層的開(kāi)發(fā),即如何組織認(rèn)證包、計(jì)費(fèi)包的數(shù)據(jù)結(jié)構(gòu)等,而RADIUS數(shù)據(jù)包傳輸層直接調(diào)用現(xiàn)成的開(kāi)源API,目前主要有兩種這樣的開(kāi)源項(xiàng)目。

  (1)pam_radius

  一個(gè)PAM模塊提供了RADIUS客戶端的功能。它是從開(kāi)源項(xiàng)目Freeradius中提取出來(lái)的,如果要使用需要對(duì)代碼做大量的修改、打補(bǔ)丁后才能使用。

  (2)radiusclient-ng

  相對(duì)比PAM的pam_radius模塊而言,radiusclient-ng的動(dòng)態(tài)庫(kù)代碼不用修改就可以拿過(guò)來(lái)使用,只需安裝radiusclient-ng的動(dòng)態(tài)庫(kù),然后根據(jù)配置文件、開(kāi)放的API接口修改Asterisk代碼就可以完成Asterisk AAA模塊的構(gòu)建。

  所以在本文使用radiusclient-ng開(kāi)源軟件包。

貝高林的Blog

相關(guān)閱讀:

分享到: 收藏

專題