? 近期公司做一個項目,動態將用戶從BAS踢下線及動態修改用戶帶寬。
由于里面涉及到Radius 3576協議,找了一些資料 如下:
A:中斷消息(DM)
?? 為了中斷NAS上的用戶會話,中斷請求報文由RADIUS服務器發送。并丟棄所有關
?? 聯會話的上下文。中斷請求報文發送到UDP端口3799,and identifies the NAS
?? +----------+?? Disconnect-Request???? +----------+
?? |????????? |?? <-------------------- |????????? |
?? |??? NAS?? |????????????????????????? | RADIUS |
?? |????????? |?? Disconnect-Response??? | Server |
?? |????????? |?? ---------------------> |????????? |
?? +----------+????????????????????????? +----------+
?? NAS回應由RADIUS服務器發送的中斷請求報文,如果所有的關聯會話上下文被丟
?? 棄并且用戶會話不再連接,NAS回應Disconnect-ACK報文,如果NAS不能中斷會
?? 話和丟棄所有的關聯會話上下文,NAS則發送Disconnect-NAK報文。如果
?? Disconnect-Request報文中包含值為“Authorize Only”的Service-Type屬
?? 性,則NAS必須(MUST)回應Disconnect-NAK報文,Disconnect-ACK報文必須不
?? 能(MUST NOT)發送。如果Disconnect-Request報文中包含不支持的
?? Service-Type屬性,則NAS必須(MUST)回應Disconnect-NAK報文,該報文可以
?? (MAY)包含值為“Unsupported Service”的Error-Cause屬性。
?? Disconnect-ACK報文可以(MAY)包含值為6(Admin-Reset)的
?? Acct-Terminate-Cause屬性(屬性類型49,定義在[RFC2866])。
B:更改授權消息(CoA)
?? CoA-Request報文包含了動態更改會話授權的信息。通常使用在更改數據過濾
?? 上。數據過濾可以是關于入口或者出口的,在額外的標識屬性(標識入口或者
?? 出口的??)中發送,在3章節描述。使用的端口和報文格式(在2.3節描述)
?? 和Disconnect-Request消息相同。
?? 下列屬性可以(MAY)在CoA-Request報文中發送:
?? Filter-ID (11) - 表示應用在會話中的數據過濾列表的名稱。
?? +----------+????? CoA-Request???????? +----------+
?? |????????? | <--------------------?? |????????? |
?? |?? NAS??? |????????????????????????? | RADIUS |
?? |????????? |???? CoA-Response???????? | Server |
?? |????????? |?? ---------------------> |????????? |
?? +----------+????????????????????????? +----------+
?? NAS在回應由RADIUS服務器發送的CoA-Request報文時,如果NAS能夠成功地更改
?? 用戶會話的授權信息。NAS發送CoA-ACK報文。如果請求不成功時發送CoA-NAK報
?? 文。如果CoA-Request報文中包含值為“Authorize Only”的Service-Type屬
?? 性,則NAS必須(MUST)回應CoA-NAK報文,CoA-ACK報文必須不能(MUST NOT)
?? 發送。如果CoA-Request報文中包含不支持的Service-Type屬性,則NAS必須
?? (MUST)回應CoA-NAK報文,該報文可以(MAY)包含值為“Unsupported
?? Service”的Error-Cause屬性。
需要注意的一點就是,在向NAS 發DM 40Radius包時,創建Authonticator 進行MD5一定要進行清零操作。
3576 Radius Package:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? |???? Code????? | Identifier?? |??????????? Length???????????? |
?? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? |?????????????????????????????????????????????????????????????? |
?? |???????????????????????? Authenticator???????????????????????? |
?? |?????????????????????????????????????????????????????????????? |
?? |?????????????????????????????????????????????????????????????? |
?? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? | Attributes ...
?? +-+-+-+-+-+-+-+-+-+-+-+-+-
example:
protected byte[] create2866RequestAuthonticator(String sharedSecret, int packetLength, byte[] attributes){
MessageDigest md5 = getMd5Digest();
byte [] requestAuthenticator = new byte [16];
??????????????
??????? for (int i = 0; i < 16; i++){
??????????? requestAuthenticator[i] = 0;
??????? }
??????? md5.reset();
???????
??????? md5.update((byte)getPacketType());
??????? md5.update((byte)getPacketIdentifier());
??????? md5.update((byte)(packetLength >>
);
??????? md5.update((byte)(packetLength & 0xff));
??????? md5.update(requestAuthenticator, 0, requestAuthenticator.length);
??????? md5.update(attributes, 0, attributes.length);
??????? md5.update(sharedSecret.getBytes());
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? return md5.digest();
???? }
由于里面涉及到Radius 3576協議,找了一些資料 如下:
A:中斷消息(DM)
?? 為了中斷NAS上的用戶會話,中斷請求報文由RADIUS服務器發送。并丟棄所有關
?? 聯會話的上下文。中斷請求報文發送到UDP端口3799,and identifies the NAS
?? +----------+?? Disconnect-Request???? +----------+
?? |????????? |?? <-------------------- |????????? |
?? |??? NAS?? |????????????????????????? | RADIUS |
?? |????????? |?? Disconnect-Response??? | Server |
?? |????????? |?? ---------------------> |????????? |
?? +----------+????????????????????????? +----------+
?? NAS回應由RADIUS服務器發送的中斷請求報文,如果所有的關聯會話上下文被丟
?? 棄并且用戶會話不再連接,NAS回應Disconnect-ACK報文,如果NAS不能中斷會
?? 話和丟棄所有的關聯會話上下文,NAS則發送Disconnect-NAK報文。如果
?? Disconnect-Request報文中包含值為“Authorize Only”的Service-Type屬
?? 性,則NAS必須(MUST)回應Disconnect-NAK報文,Disconnect-ACK報文必須不
?? 能(MUST NOT)發送。如果Disconnect-Request報文中包含不支持的
?? Service-Type屬性,則NAS必須(MUST)回應Disconnect-NAK報文,該報文可以
?? (MAY)包含值為“Unsupported Service”的Error-Cause屬性。
?? Disconnect-ACK報文可以(MAY)包含值為6(Admin-Reset)的
?? Acct-Terminate-Cause屬性(屬性類型49,定義在[RFC2866])。
B:更改授權消息(CoA)
?? CoA-Request報文包含了動態更改會話授權的信息。通常使用在更改數據過濾
?? 上。數據過濾可以是關于入口或者出口的,在額外的標識屬性(標識入口或者
?? 出口的??)中發送,在3章節描述。使用的端口和報文格式(在2.3節描述)
?? 和Disconnect-Request消息相同。
?? 下列屬性可以(MAY)在CoA-Request報文中發送:
?? Filter-ID (11) - 表示應用在會話中的數據過濾列表的名稱。
?? +----------+????? CoA-Request???????? +----------+
?? |????????? | <--------------------?? |????????? |
?? |?? NAS??? |????????????????????????? | RADIUS |
?? |????????? |???? CoA-Response???????? | Server |
?? |????????? |?? ---------------------> |????????? |
?? +----------+????????????????????????? +----------+
?? NAS在回應由RADIUS服務器發送的CoA-Request報文時,如果NAS能夠成功地更改
?? 用戶會話的授權信息。NAS發送CoA-ACK報文。如果請求不成功時發送CoA-NAK報
?? 文。如果CoA-Request報文中包含值為“Authorize Only”的Service-Type屬
?? 性,則NAS必須(MUST)回應CoA-NAK報文,CoA-ACK報文必須不能(MUST NOT)
?? 發送。如果CoA-Request報文中包含不支持的Service-Type屬性,則NAS必須
?? (MUST)回應CoA-NAK報文,該報文可以(MAY)包含值為“Unsupported
?? Service”的Error-Cause屬性。
需要注意的一點就是,在向NAS 發DM 40Radius包時,創建Authonticator 進行MD5一定要進行清零操作。
3576 Radius Package:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? |???? Code????? | Identifier?? |??????????? Length???????????? |
?? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? |?????????????????????????????????????????????????????????????? |
?? |???????????????????????? Authenticator???????????????????????? |
?? |?????????????????????????????????????????????????????????????? |
?? |?????????????????????????????????????????????????????????????? |
?? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
?? | Attributes ...
?? +-+-+-+-+-+-+-+-+-+-+-+-+-
example:
protected byte[] create2866RequestAuthonticator(String sharedSecret, int packetLength, byte[] attributes){
MessageDigest md5 = getMd5Digest();
byte [] requestAuthenticator = new byte [16];
??????????????
??????? for (int i = 0; i < 16; i++){
??????????? requestAuthenticator[i] = 0;
??????? }
??????? md5.reset();
???????
??????? md5.update((byte)getPacketType());
??????? md5.update((byte)getPacketIdentifier());
??????? md5.update((byte)(packetLength >>

??????? md5.update((byte)(packetLength & 0xff));
??????? md5.update(requestAuthenticator, 0, requestAuthenticator.length);
??????? md5.update(attributes, 0, attributes.length);
??????? md5.update(sharedSecret.getBytes());
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????? return md5.digest();
???? }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
