麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種實現用戶業務遠程驗證撥號協議的編碼和解碼方法

文檔序號:7923227閱讀:285來源:國知局
專利名稱:一種實現用戶業務遠程驗證撥號協議的編碼和解碼方法
技術領域
本發明涉及一種網絡通信協議的編解碼方法,具體而言,本發明涉及一種實現用戶業務遠程驗證撥號(Remote Authentication Dial In User Service,以下簡稱為RADIUS)協議的編碼和解碼方法。
背景技術
當一個網絡允許外部用戶通過公用網對其進行訪問時,用戶在地理上可以極為分散,大量分散用戶從不同的地方可以對這個網絡進行隨機的訪問。由于存在內外的雙向數據流動,網絡安全成為很重要的問題。安全管理的內容包括哪些用戶是否可以獲得訪問權(即驗證)?獲得訪問權的用戶可以允許使用哪些服務(即授權)?如何對使用網絡資源的用戶進行記費(即記賬)?驗證、授權和記賬統稱為AAA(Authentication,Authorization and Accounting),其實現可采用RADIUS協議。
RADIUS業務符合圖1所示典型的客戶機/服務器(client/server)模型。如圖1所示,網絡接入服務器(NAS)或路由器上運行的AAA模塊對用戶來講為服務器端,而對實現RADIUS協議的RADIUS服務器來講是客戶端。RADIUS服務器通過建立一個唯一的用戶數據庫存儲用戶名、用戶密碼來進行驗證;存儲傳遞給用戶的服務類型以及相應的配置信息來完成授權。
以下簡要描述RADIUS協議。圖2示出了RADIUS報文格式,其中,碼(Code)域為1個八位字節,表示RADIUS報文類型,即服務類型;標識符(Identifier)域亦為一個八位字節,用于匹配請求和應答;長度(Length)域為2個八位字節,表示整個報文的長度;驗證符(Authenticator)域為16個八位字節,用于驗證來自RADIUS服務器的應答和密碼隱藏算法;而屬性(Attributes)域的長度是可變的并且包含該RADIUS報文對應的服務類型所需以及任何需要的可選屬性的屬性列表。
在圖1所示RADIUS業務的客戶機/服務器模型中,客戶機和服務器上的AAA模塊都必須具有處理RADIUS報文的功能,其中包括生成和讀取RADIUS報文的功能。在計算機系統上實現RADIUS協議實際上就是由處理器執行一系列完成RADIUS協議功能的指令代碼,而構造完成生成和讀取RADIUS報文功能的指令代碼的過程在這里分別被稱為RADIUS協議的編碼和解碼。由上可見,每種類型RADIUS報文中的代碼域、標識符域、長度域和驗證符域都具有固定的長度,占據的存儲空間是不變的,但是屬性域卻因每種RADIUS報文中屬性個數、種類等的不同而各異。因此,在現有技術中,由于屬性域差異的存在,不得不為每種類型RADIUS報文的生成和讀取都專門進行編碼和解碼,即生成相應的指令代碼段(或函數)。由于每個這樣的函數都針對特定RADIUS報文的生成或讀取功能,代碼內容與所處理報文、屬性種類、屬性個數以及屬性長度等密切相關,因此報文結構上的任何一點修改都將牽涉到代碼的修改。
RADIUS協議實際上是一個包含多個RADIUS協議棧的協議棧類,其中的每個RADIUS協議棧除了具備基本的協議配置以外還可以在實際應用中作各種擴展。由上可見,在現有技術中,編解碼過程與RADIUS協議結構內容沒有分離,報文或者屬性在結構上的任何修改都需要更新編解碼部分的代碼,因此RADIUS協議棧的實現很不靈活,而且不同RADIUS協議棧之間兼容困難,經常為了支持一個不同擴展的協議而必須重新編碼和解碼。另外,當同時實現服務器端和客戶機端(此時AAA服務器作為代理服務器)時,需要采用兩套不相關的代碼來實現一套協議的編解碼。最后,實現具體協議棧的代碼長度與報文個數正相關,隨著報文個數的增多,實現協議棧的代碼量也將線性增加。

發明內容
本發明的目的是提供一種實現用戶業務遠程驗證撥號(RADIUS)協議的編解碼方法,它可以靈活地實現各種RADIUS協議棧的編碼和解碼。
按照本發明的實現用戶業務遠程驗證撥號(RADIUS)協議的編碼和解碼方法,RADIUS協議棧類包含多個RADIUS協議棧,其特征在于,當對任一RADIUS協議棧進行編碼和解碼處理時,執行以下步驟(1)將該RADIUS協議棧下定義的結構信息寫入存儲器內,所述結構信息包括每一屬性的各種特征信息和每種類型RADIUS報文中所使用屬性的各種使用狀態信息,并且不同RADIUS協議棧下定義的所述結構信息都具有預先確定的統一格式;以及(2)從存儲器內讀取具有所述預先確定的統一格式的結構信息;以及(3)對于每一種具有所述預先確定的統一格式的結構信息,都以不同RADIUS協議棧之間都相同的編碼和解碼方式進行處理以獲得實現該RADIUS協議棧的指令代碼。
由上可見,由于每種結構信息,包括屬性使用狀態信息和特征信息都以統一格式表示和存儲,由此可以針對每一種格式的結構信息定義相應的統一編碼和解碼處理方式,因此當RADIUS協議棧有改動時,只要改動后的結構信息仍然以原先的統一格式表示,就無需修改編碼和解碼方式。這樣,開發RADIUS協議棧代碼的周期將大大縮短并且減少了維護的工作量和成本。


通過以下結合附圖對本發明較佳實施例的描述,可以進一步理解本發明的目的、特征和優點圖1為RADIUS協議下典型的客戶機/服務器模型示意圖;圖2示出了RADIUS報文格式;圖3為按照本發明方法的解碼主流程示意圖;圖4為按照本發明方法的主屬性解碼流程示意圖;圖5為按照本發明方法的基本屬性解碼流程示意圖;圖6為按照本發明方法的編碼主流程示意圖;圖7為按照本發明方法的主屬性編碼流程示意圖;以及圖8為按照本發明方法的基本屬性編碼流程示意圖。
具體實施例方式
在本文中,RADIUS報文中的代碼域、標識符域、長度域和驗證符域被統稱為報文頭部。如上所述,不同RADIUS協議棧下每種類型RADIUS報文中的代碼域、標識符域、長度域和驗證符域都具有固定的長度和排列順序,因此報文頭部的編碼和解碼在不同RADIUS協議棧和報文之間以統一方式處理是顯而易見的。但是屬性域比較復雜,其結構信息因屬性個數、種類等的不同而變化,在本文中,結構信息包含但不局限于RADIUS報文頭部結構、每一屬性的各種特征信息和每種類型RADIUS報文中所使用屬性的各種使用狀態信息。本發明方法的著眼點即在于以統一的編碼和解碼方式處理隨RADIUS協議棧以及報文類型不同而變化的屬性域。為此,必須以統一格式表示屬性域的各種結構信息,在此基礎上才可對每種統一格式的結構信息定義相應的統一的編碼和解碼方式。
值得指出的是,按照本發明方法的以統一格式表示結構信息并以統一方式進行編碼和解碼的過程最終都可歸結為由硬件裝置實現,這些硬件裝置包括但不局限于用于存儲結構信息的各種存儲設備和以統一方式編碼和解碼結構信息的處理器,這里的處理器可以是物理上實際對應的一個專用中央處理器(CPU),也可以是具有信息或數據處理能力的多個邏輯處理單元的組合。在本發明中,上述硬件裝置被統稱為RADIUS協議處理器并且用于實現按照本發明的RADIUS協議編碼和解碼方法。
以下首先描述按照本發明方法的以統一格式表示屬性域各種結構信息的較佳方式。為方便起見,這些統一格式表示的信息結構可以寫入一個協議棧配置文件中,不同的協議棧具有不同的協議棧配置文件,但是每個配置文件表示結構信息的格式都是相同的。
附錄A和B分別示出了符合標準RADIUS協議和RADIUS+1.0協議的配置文件,如附錄A和B所示,兩個配置文件都由頭部、消息、屬性三部分組成。其中,頭部中的字段MINMSGLENGTH和MAXMSGLENGTH描述本RADIUS協議棧下報文的最小和最大長度,FILETERUNKNOWATT描述編解碼時是否過濾未知屬性,MINPRIMITIVELEN描述基本屬性的最小長度,MINCONSTRUCTORLEN描述結構型屬性的最小長度;報文部分以RADIUS報文為單位,描述了每種RADIUS報文中所使用屬性的使用狀態信息,其中,字段MSGTYPE表示報文類型,用于標識當前描述的使用狀態信息的屬性所屬的RADIUS報文,MATTRIBUTE表示報文部分內每個屬性的首部,用于標識每個屬性使用狀態信息描述的開始,隨后的參數字段type描述屬性的編號,mtag描述屬性的性質是可選屬性、必備屬性還是出現次數為0或更多的屬性,times描述在目標報文結構中出現的次數;屬性部分分為LEVEL1和LEVEL2兩層,分別描述主屬性和子屬性的特征信息,在每一層的屬性特征信息描述中,字段ATTRIBUTE表示屬性部分內每個屬性的首部,用于標識每個屬性特征信息描述的開始,隨后的參數字段name描述屬性的名稱,type描述屬性的編號,這與報文部分內的type字段是一致的,kind描述屬性的數據類型,min描述屬性的最小長度或最小值,max描述屬性的最大長度或最大值,len描述屬性在報文結構中的長度,form描述屬性是否為結構型屬性。
由上可見,在不同的RADIUS協議棧配置文件中,每個屬性在任一RADIUS報文中的使用狀態信息以及自身特征信息在每個配置文件中都以相應的統一格式表示,例如,每個屬性的使用狀態信息以MSGTYPE標識其所處的報文,并以MATTRIBUTE標識使用狀態信息描述的開始,隨后依次出現屬性編號、屬性性質、屬性在目標報文結構中出現次數等參數字段。又如,每個屬性的特征信息以ATTRIBUTE標識每個屬性特征信息描述的開始,隨后依次出現屬性名稱、屬性編號、屬性數據類型、屬性最小長度或最小值、屬性最大長度或最大值、屬性在報文結構中的長度和結構型屬性標志等參數字段。這種將不同RADIUS協議棧下定義的每個屬性的使用狀態信息和特征信息都以統一格式表示在不同的配置文件中的方式使得以統一的編碼和解碼規則或方式處理每一種格式的結構信息成為可能。具體而言,在編碼和解碼過程中,可以將上述配置文件的結構定義視為是對RADIUS協議棧類的定義,而將這種配置文件結構下具體的配置文件視為是對每個RADIUS協議棧的定義。如果借助面向對象方法的程序設計思想描述,這里的RADIUS協議棧類相當于“類”,而每個RADIUS協議棧是該類的一個“實例”,因此本發明的方法很容易用面向對象的編程語言來實現。例如可以編寫一個協議棧類程序,當啟動時初始化部分可以根據需要動態生成協議棧實例,對不同的協議接口調用不同的實例進行編碼和解碼。
值得指出的是,配置文件是一個邏輯概念,代表了信息或數據的存儲結構,在物理上實際對應的是存儲器的一個存儲區域。而且更為重要的是,上述附錄A和B示出的結構信息表示方式只是示意性質的,不應理解為是對本發明范圍的限定。實際上,諸如每一屬性的各種特征信息和每種類型RADIUS報文中所使用屬性的各種使用狀態信息之類的結構信息可以有無數種具體的統一格式表示方式,本發明的著眼點是通過利用統一格式表示或存儲結構信息使得RADIUS協議的編碼和解碼方式或規則與協議棧內容能夠分離開來,其中編碼和解碼規則由代碼體現,而協議棧內容由配置文件體現。
以下借助圖3~8描述本發明編碼和解碼RADIUS協議棧的方式。在本發明的方法中,借用面向對象的程序設計思想,將RADIUS報文和屬性視為不同的對象,不同類型的RADIUS報文或屬性只是各自所屬對象內的不同實例,因此可以對所有RADIUS報文和屬性實行統一的處理方式。
圖3為按照本發明方法的解碼主流程示意圖。如圖3所示,首先對RADIUS報文頭部進行解碼處理,如上所述,由于報文頭部的結構是固定不變的,因此可以統一的解碼規則進行處理。報文頭部解碼完成后,讀取配置文件以確定是否有需要解碼的屬性。如果通過讀取配置文件確定有需要解碼的屬性,則讀取屬性類型,并隨后對主屬性按照統一的解碼規則進行處理。接著,判斷屬性處理是否成功,如果屬性處理不成功,則返回解碼出錯指示并結束解碼主流程,如果屬性處理成功,則返回讀取配置文件以確定是否有需要解碼的屬性的步驟。相反,如果通過讀取配置文件確定沒有需要解碼的屬性,則確定已解碼的屬性個數是否合法,即判斷解碼過程中記錄下來的解碼屬性個數與配置文件中mtag的取值是否一致。如果確定屬性個數合法,即,報文中屬性個數與配置文件規定的相等時,則將參數字段內容解碼到結果報文中,即,將配置文件中參數字段的內容復制至緩沖區的特定位置上,特定位置根據配置文件中解碼后參數長度定義和參數出現順序計算確定,隨后返回解碼成功指示。
圖4為圖3中主屬性解碼步驟的流程示意圖。如圖4所示,首先根據配置文件中參數字段form確定屬性是否為包含子屬性的結構屬性。如果判斷不是結構屬性,則進行基本屬性解碼處理。然后根據配置文件中屬性的結構信息判斷該基本屬性是否合法,如果不合法,則返回屬性不合法指示并結束主屬性解碼流程,否則增加對應類型已解碼屬性個數以用于圖3中確定已解碼屬性個數是否合法的步驟。最后,返回屬性合法指示并結束主屬性解碼流程。相反,如果判斷是結構屬性,則判斷該結構屬性中是否還包含未解碼的子屬性。如果不包含未解碼的子屬性,則增加對應類型已解碼屬性個數,返回屬性合法指示并結束主屬性解碼流程,否則對子屬性按照基本屬性解碼規則處理。對子屬性按照基本屬性解碼規則處理后,判斷解碼后的該子屬性是否合法。如果合法,則增加對應類型已解碼子屬性的個數并返回至判斷是否還有子屬性的步驟,否則返回屬性不合法指示并結束主屬性解碼流程。
圖5為圖4中判斷基本屬性是否合法步驟的流程示意圖。如圖5所示,首先讀取解碼后屬性的長度。然后判斷讀取的屬性長度是否合法,即,將讀取的長度與配置文件中的參數字段king進行比較以確定是否匹配。如果不合法或不一致,則返回屬性錯誤指示并結束基本屬性解碼流程。如果合法或一致,則讀取屬性的內容并進一步判斷屬性的內容是否合法,即,將讀取的內容與配置文件中的min和max等參數字段進行比較以確定是否匹配。如果合法或一致,則返回屬性正確指示并結束基本屬性解碼流程,否則,返回屬性錯誤指示并結束基本屬性是否合法步驟的流程。
圖6為按照本發明方法的編碼主流程示意圖。如圖6所示,首先對RADIUS報文頭部進行編碼處理,如上所述,由于報文頭部的結構是固定不變的,因此可以統一的編碼規則進行處理。報文頭部編碼完成后,讀取配置文件以確定是否有需要編碼的屬性。如果通過讀取配置文件確定有需要編碼的屬性,則讀取屬性類型,并隨后對主屬性按照統一的編碼規則進行處理。接著,判斷屬性處理是否成功,如果屬性處理不成功,則返回編碼出錯指示并結束解碼主流程,如果屬性處理成功,則返回讀取配置文件以確定是否有需要編碼的屬性的步驟。相反,如果通過讀取配置文件確定沒有需要編碼的屬性,則返回編碼成功指示。
圖7為圖6中主屬性編碼步驟的流程示意圖。如圖6所示,首先根據配置文件中參數字段form確定屬性是否為包含子屬性的結構屬性。如果判斷不是結構屬性,則進行基本屬性編碼處理。然后返回編碼成功指示并結束主屬性編碼流程。相反,如果判斷是結構屬性,則進一步判斷該結構屬性中是否還包含未編碼的子屬性。如果不包含未編碼的子屬性,則計算出主屬性編碼后的長度,然后對該結構屬性進行打包處理,即,將參數對應的屬性類型、長度和內容依次寫入編碼結果的緩沖區內,接著返回編碼成功指示并結束主屬性編碼流程。如果包含未編碼的子屬性,則對子屬性按照基本屬性編碼規則處理。對子屬性按照基本屬性編碼規則處理后,判斷編碼是否成功,如果成功,則返回至判斷是否還有子屬性的步驟,否則返回編碼失敗指示并結束主屬性編碼流程。
圖8為圖7中基本屬性編碼步驟的流程示意圖。如圖8所示,首先判斷讀取編碼后屬性的參數是否合法,即參數的取值范圍是否與配置文件中的一致。如果不合法或不一致,則返回編碼失敗指示并結束基本屬性編碼流程。如果合法或一致,則計算屬性編碼后的長度并將該參數打包,即,將參數對應的屬性類型、長度和內容依次寫入編碼結果的緩沖區內,然后返回編碼成功指示并結束基本屬性編碼流程。
附錄A 標準RADIUS協議編碼和解碼配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN3MINCONSTRUCTORLEN3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag 0=a optinal attribute# 1=a mandatory attribute# 2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor# others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flagflag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# head type mtagtimes conf_fiag conf_value#USER-NAME 0MATTRIBUTE 1010#USER-PASSWDMATTRIBUTE 2010#CHAP-PASSWDMATTRIBUTE 3010#FRAMED-PROTOCOLMATTRIBUTE 7010 8#VENDOR-SPECIFYMATTRIBUTE 26 011 2#ISP-IDMATTRIBUTE 17 010 163#CONNECT-ID,optional for v10MATTRIBUTE 26 010#NAS-PORT-IDMATTRIBUTE 87 010 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 010#CHAP-CHALLENGEMATTRIBUTE 60 010#FRAME-IP-ADDRESSMATTRIBUTE 8010#CLASSMATTRIBUTE 25 210#SeviceTypeMATTRIBUTE 6011#NAS-PortMATTRIBUTE 5010#StateMATTRIBUTE 24 010ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 1 0 10#FRAMED-PROTOCOLMATTRIBUTE 7 0 10#FRAMED-IP-ADDRESSMATTRIBUTE 8 0 10#FRAMED-IP-NETMASKMATTRIBUTE 9 0 10#FILTER-IDMATTRIBUTE 11 2 30#CLASSMATTRIBUTE 25 2 30&lt;dp n="d9"/&gt;#IDLE-TIMEOUTMATTRIBUTE 28 010#FRAMED-IP-POOL-IDMATTRIBUTE 88 010#ACCT-INTERIM-INTERVALMATTRIBUTE 85 010#Session-TimeoutMATTRIBUTE 27 010ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 010ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 1010#ACCT-STATUS-TYPEMATTRIBUTE 40 110#ACCT-DELAY-TIMEMATTRIBUTE 41 010#ACCT-SESSION-IDMATTRIBUTE 44 110#TERMINATE-CAUSEMATTRIBUTE 49 010#CLASSMATTRIBUTE 25 230#FRAMED-IP-ADDRESSMATTRIBUTE 8010#Event_TimestampMATTRIBUTE 55 010#AcctInputGigawordsMATTRIBUTE 52 010#AcctOutputGigawordsMATTRIBUTE 53 010#AcctInputOctetsMATTRIBUTE 42 010#AcctOutputOctetsMATTRIBUTE 43 010#AcctInputPacketsMATTRIBUTE 47 010#AcctOutputPacketsMATTRIBUTE 48 010ENDMSG#Accounting-ResponseMSGTYPE 5#SESSION-TIMEOUTMATTRIBUTE 27 010ENDMSG################################################################ headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min maxwidth formATTRIBUTERad_UserName1 2 1 63 32 0ATTRIBUTERad_UserPassword 22 16128 16 0ATTRIBUTERad_CHAPPassword3 2 1717 20 0ATTRIBUTERad_NASIPAddress 4 3 0 4294967295 4 0ATTRIBUTERad_NASPort 53 065535 40ATTRIBUTERad_ServiceType6 3111 40ATTRIBUTERad FramedProtocol 7 3 110040&lt;dp n="d10"/&gt;ATTRIBUTE Rad_FramedIPAddress 8 4 0 4294967295 40ATTRIBUTE Rad_FramedIPNetmask 9 4 0 4294967295 4 0ATTRIBUTE Rad_FramedRouting 10 3 034 0ATTRIBUTE Rad_FilterId 11 2 08 12 0ATTRIBUTE Rad_FramedMTU 12 3 01 4294967295 4 0ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 4 0ATTRIBUTE Rad_LoginIPHost 14 3 0 4294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 0 000 0ATTRIBUTE Rad_ReplyMessage 18 2 120048 0ATTRIBUTE Rad_CallbackNumber 19 0 0 0 00ATTRIBUTE Rad_CallbackId 200 0 00 0ATTRIBUTE e 2100 0 0 0ATTRIBUTE Rad_FramedRoute 220 0 0 00ATTRIBUTE Rad_FramedIPXNetwork23 0 00 00ATTRIBUTE Rad_State 24 2 1429496 32 0ATTRIBUTE Rad_Class 25 2 1200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad_SessionTimeout 27 3 0 4294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 0 4294967295 4 0ATTRIBUTE Rad_TerminationAction 29 3 0 4294967295 4 0ATTRIBUTE Rad_CalledStationId 30 2 120024 0ATTRIBUTE Rad_CallingStationId 31 2 1 200 240ATTRIBUTE Rad_NASIdentifier 32 00 0 0 0ATTRIBUTE Rad_ProxyState 33 0 00 00ATTRIBUTE Rad_LoginLATService 34 0 0 000ATTRIBUTE Rad_LoginLATNode 35 0 0 000ATTRIBUTE Rad_LoginLATGroup 36 0 0 000ATTRIBUTE Rad_FramedAppleTalkLink37 0 0000ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 0 0ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 40 3 0 4294967295 40ATTRIBUTE Rad_AcctDelayTime 41 3 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets 42 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputOctets 43 3 0 4294967295 4 0ATTRIBUTE Rad_AcctSessionId 44 21 200 56 0ATTRIBUTE Rad_AcctAuthentic 45 000 00ATTRIBUTE Rad_AcctSessionTime 46 000 00ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId 50 0 0 0 0 0ATTRIBUTE Rad_AcctLinkCount51 0 0 0 0 0ATTRIBUTE Rad_AcctInputGigawords 52 3 0 4000 4 0ATTRIBUTE Rad_AcctInputGigawords 53 3 0 4000 4 0ATTRIBUTE Rad_EventTimestamp 55 3 0 4294967295 40ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType61 3 0 4294967295 4 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 0 0ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4 0ATTRIBUTE Rad_NASPortId8721 200 32 0ATTRIBUTE Rad_FramedPool 8830 4294967295 40ENDLEVELLEVEL 1# headnametype kind minmax width formATTRIBUTE Rad_InputPeakRate13 0 4294967295 4 0ATTRIBUTE Rad_InputAverageRate2 3 0 4294967295 4 0ATTRIBUTE Rad_InputBasicRate3 3 0 4294967295 40ATTRIBUTE Rad_OutputPeakRate 4 304294967295 4 0ATTRIBUTE Rad_OutputAverageRate5 3 0 4294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 4 0ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 304294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch 9 3 0 4294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 0 4294967295 4 0&lt;dp n="d11"/&gt;ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch133 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfterTariffSwitch 143 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 04294967295 4 0ATTRIBUTE Rad_TariffSwitchInterval 163 04294967295 4 0ATTRIBUTE Rad_ISPID17 2 064 320ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 3 0 42949672954 0ATTRIBUTE Rad_Priority 22 30 4294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 04294967295 4 0ATTRIBUTE Rad_ResultCode 25 3 0 4294967295 40ATTRIBUTE Rad_ConnectId 26304294967295 4 0ENDLEVEL</pre>
附錄B RADIUS協議+1.1編碼和解碼配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN 3MINCONSTRUCTORLEN 3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag0=a optinal attribute#1=a mandatory attribute#2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor#others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flag flag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# headtypemtag times conf_flag conf_value#USER-NAME 0MATTRIBUTE 10 1 0 555555555551#USER-PASSWDMATTRIBUTE 20 1 0#CHAP-PASSWDMATTRIBUTE 30 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0 8#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1 2#ISP-IDMATTRIBUTE 17 0 1 0 163#CONNECT-ID,optional for v10MATTRIBUTE 26 0 1 0 3#NAS-PORT-IDMATTRIBUTE 87 0 1 0 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 0 1 0#CHAP-CHALLENGEMATTRIBUTE 60 0 1 0#FRAME-IP-ADDRESSMATTRIBUTE 80 1 0#CLASSMATTRIBUTE 25 2 3 0ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 10 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0#FRAMED-IP-NETMASKMATTRIBUTE 90 1 0#FILTER-IDMATTRIBUTE 11 2 3 0#CLASSMATTRIBUTE 25 2 3 0#IDLE-TIMEOUTMATTRIBUTE 28 0 1 0#FRAMED-IP-POOL-IDMATTRIBUTE 88 0 1 0#ACCT-INTERIM-INTERVAL&lt;dp n="d13"/&gt;MATTRIBUTE 85 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#RATE 6MATTRIBUTE 10 1 0MATTRIBUTE 20 1 0MATTRIBUTE 30 1 0MATTRIBUTE 40 1 0MATTRIBUTE 50 1 0MATTRIBUTE 60 1 0#MAX-USERS-PER-LOGICPORTMATTRIBUTE 19 0 1 011#ISP-IDMATTRIBUTE 17 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#PRIORTYMATTRIBUTE 22 0 1 0ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1#CONNECT-IDMATTRIBUTE 26 1 1 0ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 10 1 0#ACCT-STATUS-TYPEMATTRIBUTE 40 1 1 0#ACCT-DELAY-TIMEMATTRIBUTE 41 0 1 0#ACCT-SESSION-IDMATTRIBUTE 44 1 1 0#TERMINATE-CAUSEMATTRIBUTE 49 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#VOLUME-infoMATTRIBUTE 70 1 0MATTRIBUTE 80 1 0MATTRIBUTE 90 1 0MATTRIBUTE 10 0 1 0MATTRIBUTE l1 0 1 0MATTRIBUTE 12 0 1 0MATTRIBUTE 13 0 1 0MATTRIBUTE 14 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#CONTROL-IDENTIFIERMATTRIBUTE 24 0 1 0#CLASSMATTRIBUTE 25 2 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0ENDMSG#Accounting-ResponseMSGTYPE5#USER-NAMEMATTRIBUTE 10 1 0#SESSION-TIMEOUTMATTRIBUTE 27 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 13&lt;dp n="d14"/&gt;#REMANENT-VOLUMEMATTRIB UTE 15 010#TARIFF-SWITCH-INTERVALMATTRIBUTE 16 010#CONNECT-IDMATTRIBUTE 26 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 010ENDMSG#Trigger-RequestMSGTYPE 201#USER-NAMEMATTRIBUTE 1 110#FRAMED-IP-ADDRESSMATTRIBUTE 8 110#FILTER-IDMATTRIBUTE 11 230#NAS-PORT-IDMATTRIBUTE 87 010#VENDOR-SPECIFYMATTRIBUTE 26 001#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110ENDMSG#Terminate-RequestMSGTYPE 202#USER-NAMEMATTRIBUTE 1 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 110#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10ENDMSG#SetpolicyMSGTYPE 203#USER-NAMEMATTRIBUTE 1 1 10#ACCT-SESSION-IDMATTRIBUTE 44 1 10#FILTER-IDMATTRIBUTE 11 2 30#VENDOR-SPECIFYMATTRIBUTE 26 0 01 11#RATE6MATTRIBUTE 1 0 10MATTRIBUTE 2 0 10MATTRIBUTE 3 0 10MATTRIBUTE 4 0 10MATTRIBUTE 5 0 10MATTRIBUTE 6 0 10#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10#ISP-ID&lt;dp n="d15"/&gt;MATTRIBUTE 17 010#PRIORTYMATTRIBUTE 22 010ENDMSG#Control-ResultMSGTYPE 20#FRAMED-IP-ADDRESSMATTRIBUTE 8 010#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 010#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110#RESULT-CODEMATTRIBUTE 25 010ENDMSG######################################################################## headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min max width formATTRIBUTE Rad_UserName 12 1 63 32 0ATTRIBUTE Rad_UserPassword 22 16 128 16 0ATTRIBUTE Rad_CHAPPassword 3 2 1717 20 0ATTRIBUTE Rad NASIPAddress4 3 0 4294967295 40ATTRIBUTE Rad NASPort 5 3 0 65535 4 0ATTRIBUTE Rad_ServiceType 6 31 11 4 0ATTRIBUTE Rad FramedProtocol 73 1 100 4 0ATTRIBUTE Rad_FramedIPAddress8 4 0 4294967295 40ATTRIBUTE Rad FramedIPNetmask9 4 0 4294967295 40ATTRIBUTE Rad_FramedRouting 10 3 0 3 40ATTRIBUTE Rad_FilterId112 0812 0ATTRIBUTE Rad FramedMTU 123 01 4294967295 40ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 40ATTRIBUTE Rad_LoginIPHost 14 3 04294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 000 0 0ATTRIBUTE Rad_ReplyMessage 18 2 1 200 480ATTRIBUTE Rad CallbackNumber19 000 00ATTRIBUTE Rad CallbackId 20 0 0 0 00ATTRIBUTE e21 0 0000ATTRIBUTE Rad_FramedRoute22 0 00 00ATTRIBUTE Rad FramedIPXNetwork23 0 00 00ATTRIBUTE Rad State24 0 0000ATTRIBUTE Rad_Class 25 21 200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad SessionTimeout 27 3 04294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 04294967295 40ATTRIBUTE Rad_TerminationAction29 3 0 4294967295 40ATTRIBUTE Rad CalledStationId 30 2 1200 24 0ATTRIBUTE Rad_CallingStationId 31 21200 240ATTRIBUTE Rad NASIdentifier32 000 00ATTRIBUTE Rad_ProxyState33 00000ATTRIBUTE Rad_LoginLATService34 000 0 0ATTRIBUTE Rad_LoginLATNode 35 000 0 0ATTRIBUTE Rad_LoginLATGroup 36 000 0 0ATTRIBUTE Rad_FramedAppleTalkLink 37 0 0 0 00&lt;dp n="d16"/&gt;ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 00ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 403 0 4294967295 40ATTRIBUTE Rad_AectDelayTime413 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets42 0 0 0 00ATTRIBUTE Rad_AcctOutputOctets 43 0 0 0 00ATTRIBUTE Rad_AcctSessionId 44 2 1 20056 0ATTRIBUTE Rad_AectAuthentie 45 00 0 0 0ATTRIBUTE Rad_AcctSessionTime 46 0 0 0 0 0ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 4 0ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId50 0 00 0 0ATTRIBUTE Rad_AcctLinkCount51 00 0 0 0ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType 6130 42949672954 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 00ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4ATTRIBUTE Rad_NASPortId 8721 200 320ATTRIBUTE Rad FramedPool88 30 4294967295 4 0ENDLEVELLEVEL 1# headname type kindminmax width formATTRIBUTE Rad_InputPeakRate1 3 04294967295 4 0ATTRIBUTE Rad_InputAverageRate 2 3 04294967295 4 0ATTRIBUTE Rad_InputBasicRate 3 3 04294967295 4 0ATTRIBUTE Rad_OutputPeakRate43 04294967295 4 0ATTRIBUTE Rad_OutputAverageRate 5 3 04294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 40ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch9 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 04294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 04294967295 4 0ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch 13 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfierTariffSwitch14 3 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 0 4294967295 4 0ATTRIBUTE Rad_TariffSwitchInterva116 3 0 4294967295 4 0ATTRIBUTE Rad_ISPID 17 2 0 64 32 0ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 304294967295 4 0ATTRIBUTE Rad_Priority 22 304294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 0 4294967295 4 0ATTRIBUTE Rad_ResultCode 25 30 4294967295 40ATTRIBUTE Rad_ConnectId 26 30 4294967295 4 0ENDLEVEL</pre>
權利要求
1.一種實現用戶業務遠程驗證撥號(RADIUS)協議的編碼和解碼方法,RADIUS協議棧類包含多個RADIUS協議棧,其特征在于,當RADIUS協議處理器對任一RADIUS協議棧進行編碼和解碼處理時,執行以下步驟(1)將該RADIUS協議棧下定義的結構信息寫入存儲器內,所述結構信息包括每一屬性的各種特征信息和每種類型RADIUS報文中所使用屬性的各種使用狀態信息,并且不同RADIUS協議棧下定義的所述結構信息都具有預先確定的統一格式;以及(2)從存儲器內讀取具有所述預先確定的統一格式的結構信息;以及(3)對于每一種具有所述預先確定的統一格式的結構信息,都以不同RADIUS協議棧之間都相同的編碼和解碼方式進行處理以獲得實現該RADIUS協議棧的指令代碼。
2.如權利要求1所述的實現RADIUS協議的編碼和解碼方法,其特征在于,每個RADIUS協議棧下定義的結構信息按照以下統一格式寫入一個可存儲在存儲器內的配置文件中所述配置文件由頭部、報文和屬性三部分組成,每一部分由字段組成,其中,頭部部分包含分別描述每個RADIUS協議棧內最大和最小報文長度、是否過濾未知屬性、基本屬性的最小長度、結構型屬性的最小長度的字段;報文部分用于描述每個RADIUS協議棧下每個RADIUS報文所使用屬性的使用狀態信息,包含分別描述每種RADIUS報文內所使用屬性的屬性編號、屬性性質、屬性在目標報文結構中出現次數的字段;屬性部分用于描述每個RADIUS協議棧下每一屬性的特征信息,包含分別描述每個屬性的屬性名稱、屬性編號、屬性數據類型、屬性最小長度或最小值、屬性最大長度或最大值、屬性在報文結構中的長度和結構型屬性標志的字段。
3.如權利要求2所述的實現RADIUS協議的編碼和解碼方法,其特征在于,屬性部分由基本屬性和子屬性兩部分組成,其中基本屬性部分包含分別描述每個基本屬性的屬性名稱、屬性編號、屬性數據類型、屬性最小長度或最小值、屬性最大長度或最大值、屬性在報文結構中的長度和結構型屬性標志的字段,子屬性部分包含分別描述每個子屬性的屬性名稱、屬性編號、屬性數據類型、屬性最小長度或最小值、屬性最大長度或最大值、屬性在報文結構中的長度和結構型屬性標志的字段。
4.如權利要求2或3所述的實現RADIUS協議的編碼和解碼方法,其特征在于,在對屬性的結構信息進行編碼和解碼時,對編碼和解碼后RADIUS報文中的屬性長度和屬性取值范圍與配置文件進行比較以確定編碼和解碼處理是否正確。
5.如權利要求2或3所述的實現RADIUS協議的編碼和解碼方法,其特征在于,在對屬性的結構信息進行編碼和解碼時,對編碼和解碼后RADIUS報文中屬性可能出現個數與配置文件進行比較以確定編碼和解碼處理是否正確。
全文摘要
本發明提供一種實現用戶業務遠程驗證撥號(RADIUS)協議的編解碼方法,它將RADIUS協議棧下定義的結構信息寫入一個配置文件中,不同RADIUS協議棧下定義的所述結構信息在配置文件中都具有預先確定的統一格式。因此對于每一種具有預先確定的統一格式的結構信息,可以都以不同RADIUS協議棧之間都相同的編碼和解碼方式進行處理以獲得實現該RADIUS協議棧的指令代碼。因此當RADIUS協議棧有改動時,只要改動后的結構信息仍然以原先的統一格式表示,就無需修改編碼和解碼方式。這樣,開發RADIUS協議棧代碼的周期將大大縮短并且減少了維護的工作量和成本。
文檔編號H04L12/00GK1471260SQ02136148
公開日2004年1月28日 申請日期2002年7月22日 優先權日2002年7月22日
發明者鄭志鵬 申請人:華為技術有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 体育| 营山县| 铜鼓县| 双城市| 格尔木市| 云梦县| 汉川市| 南宁市| 巩义市| 锡林浩特市| 长子县| 会昌县| 凯里市| 桐乡市| 元谋县| 南丰县| 那坡县| 鸡泽县| 田阳县| 新竹县| 宿州市| 河源市| 昌江| 苏尼特右旗| 肇庆市| 招远市| 宜川县| 抚顺县| 鹤峰县| 石阡县| 宁陕县| 科尔| 铜鼓县| 光泽县| 远安县| 大姚县| 罗江县| 剑河县| 大理市| 龙山县| 渝北区|