RADIUS ,是远程认证拨号用户服务的简称。RADIUS原先设计的目的是为拨号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协议,主要完成在网络接入设备和认证服务器之间承载认证、授权、计费和配置信息。RADIUS是一种C/S结构的协议,它的客户端最初就是NAS服务器,现在任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。

RADIUS基本原理:用户接入NAS,NAS向RADIUS服务器使用Access-Request数据包提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account-Request,RADIUS服务器响应Account-Accept,对用户开始计费,同时用户可以进行自己的相关操作。

RADIUS协议具有以下特点:

l 客户端/服务器结构;

l 采用共享密钥保证网络传输安全性;

l 良好的可扩展性;

l 认证机制灵活;

RADIUS 协议承载于UDP 之上,官方指定端口号为认证授权端口1812、计费端口1813。RADIUS协议在RFC2865、RFC2866 中定义。锐捷网络RG-SAM系统和NAS之间的通讯采用RADIUS协议。由于RADIUS协议的良好扩展性,很多厂家对RADIUS作了扩展,我们公司也对其进行了扩展。使用时我们应该注意不同公司对RADIUS协议扩展部分不能完全兼容。

2 RADIUS协议报文结构

2.1 Radius协议报文格式

RADIUS报文格式如下图所示,各域内容按照从左向右传送

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 ...

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

2.2 Code域

Code域长度为1个字节,用于标明RADIUS报文的类型,如果Code域中的内容是无效值,报文将被丢弃RADIUS Code域的有效值如下:

Code=1 Access-Request

Code=2 Access-Accept

Code=3 Access-Reject

Code=4 Accounting-Request

Code=5 Accounting-Response

Code=11 Access-Challenge

Code=12 Status-Server (experimental)

Code=13 Status-Client (experimental)

Code=65 业务修改请求消息

Code=66 业务修改请求回应消息

Code=67 业务修改请求回应拒绝消息

Code=255 Reserved

其中12 13 255 为保留的Code值一般不会遇到,1 2 3 4 5 11比较常见,分别标明报文类型为认证请求、认证接受、认证拒绝、计费请求、计费回应、计费成功和访问质询。

2.3 Identifier域

Identifier域长度为1个字节,用于匹配请求的回应。如果在短时间内RADIUS服务器收到从相同的源IP,相同源端口,相同标识域的报文,则认为收到的是重复的请求。

2.4 Length域

Length域占两个字节,用于指明报文的有效长度,多出长度域的字节部分将被视为填充。在接收时被忽略。如果报文长度小于长度域中的值,整个报文将被丢弃。长度域的范围在20和4096之间。

2.5 Authenticator

认证字域占用16个字节,用于Radius Client 和Server之间消息认证的有效性,和密码隐藏算法。

访问请求Access-Request报文中的认证字的值是16字节随机数,认证字的值要不能被预测并且在一个共享密钥的生命期内唯一。

访问请求Access-Request认证字

在Access-Request包中认证字的值是16字节随机数,认证字的值要不能被预测,并且在一个共享密钥的生命期内唯一;

访问回应认证字

Access-Accept Access-Reject 和Access-Challenge包中的认证字称为访问回应认证字,访问回应认证字的值定义为MD5(Code+ID+Length+RequestAuth+Attributes+Secret);

计费请求Accounting-Request认证字

在计费请求包中的认证字域称为计费请求认证字,它是一个16字节的MD5校验和,计费请求认证字的值定义为MD5(Code + Identifier + Length + 16 zero octets + request attributes +shared secret);

计费回应Accounting-Response认证字

在计费回应报文中的认证字域称为计费回应认证字,它的值定义为MD5(Accounting-Response Code + Identifier + Length + the RequestAuthenticator field from the Accounting-Request packet being replied to +the response attributes + shared secret);

2.6 Attributes域

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 ...

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

属性域的长度是可变的,它是一个由业务类型必需的属性和可选属性组成的属性链。一个属性包含如下三个部分:

2.6.1 Type域

类型域长度为一个字节,RADIUS服务器和客户端当遇到不可识别的属性时,可以将其忽略。常用的属性类型请参见RFC2865 RFC2866;

2.6.2 Length域

长度域长度为一个字节,指明了一个属性的类型、长度和值域的总长度。如果在认证请求报文中携带有属性长度非法的属性,则必须回应访问拒绝报文;如果在访问回应报文中存在非法的属性长度,这个报文必须被直接丢弃或被认为是访问拒绝报文。

2.6.3 Value域

值域由零或多个字节组成包,含详细的属性信息,它的格式由属性的长度和类型域决定。注意RADIUS 中没有一个类型的值域是以NULL(hex 00)结尾,的也就是说值域中是没有结束符的,服务器和客户端需要能够处理内嵌的NULL。

值域的数据类型是下列5 种类型之一。“text”类型是“string”类型的子集:

text 1-253 字节长

string 1-253 字节长可以包含二进制数据

address 4 字节高位在前

integer 4 字节无符号数高位在前

time 4 字节无符号数高位在前表示从1970 年1 月1 日零点零时零秒到现在的秒数

Radius报文解析的更多相关文章

  1. Radius报文解析(转)

    RADIUS ,是远程认证拨号用户服务的简称.RADIUS原先设计的目的是为拨号用户进行认证和计费.后来经过多次改进,形成了一项通用的认证计费协议,主要完成在网络接入设备和认证服务器之间承载认证.授权 ...

  2. 报文解析及CRC类

    /// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...

  3. ISO8583报文解析

    在此只写了一个8583报文的拆包,组包其实也差不多的. 不多说直接上文件, 具体思路过程,在解析类里面写的有. 其中包含了四个文件 8583resp.txt报文 ISO8583medata配置文件 B ...

  4. 基于DPI(深度报文解析)的应用识别

    一.概述 1.DPI(Deep packet inspection,深度报文解析) 所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包4 层以下的内容,包括源地址.目的地址. ...

  5. C#ModBus Tcp 报文解析

    上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开 ...

  6. GOOSE报文解析

    GOOSE报文解析 变电站 使用 MMS报文 http://www.360doc.com/content/16/1014/20/36538220_598459873.shtml

  7. MH/T4029.3 IFPL报文解析

    MH/T4029.3是民航业用来规定飞行计划相关数据交互的规范,今天我们先来解析下其中I类的IFPL报文. 我们先来看看IFPL报文长啥样. ZCZC -TITLE IFPL -FILTIM 0109 ...

  8. xml报文解析和组装

    package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...

  9. Motorola和Intel格式报文解析的区别

      结论:无论用的Motorola,还是Intel格式,只在单个信号跨字节时解析才有区别. 先看下Vector的CANoe中dbc编辑器是如何呈现报文的: 图1 CAN报文中byte与bit顺序 从图 ...

随机推荐

  1. [python] 网络数据采集 操作清单 BeautifulSoup、Selenium、Tesseract、CSV等

    Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesseract.CSV等 Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesse ...

  2. A Neural Algorithm of Artistic Style

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/53931536 1. 资源 Paper: ...

  3. excel模板解析—桥接模式:分离解析模板和业务校验

    在做excel模板解析的时候,其实会有两个部分,第一,将模板读取出来,校验一些必录项等. 但除了这些,在数据真正被业务线使用的时候,还会有一些其他的校验,比如说:根据业务,年龄是不能超过多少岁的,包括 ...

  4. 第十章 用户数据报协议和IP分片

    用户数据报协议和IP分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议.它仅提供差错检测.只是检测,而不是纠正,它只是把应用程序传给IP层的数据发送出去,但是并不会保证数据能够完好无损的到达 ...

  5. Mysql入门的10条语句

    1.查看当前服务器下面,有那些库(database)? 答: show databases; 2.如何创建一个数据库? 答 : create database 最后面在写数据库名:分号结束 3.选择数 ...

  6. synflood 模拟工具

    synflood 模拟工具 来源 https://blog.csdn.net/wuzhimang/article/details/54581117 因项目需要,要对主流的几家抗DDoS设备做测评,当然 ...

  7. [洛谷P4656][CEOI2017]Palindromic Partitions

    题目大意:一个长度为$n$的字符串,要求把它分成尽可能多的小块,使得这些块构成回文串 题解:贪心,从两边从找尽可能小的块使得左右的块相等,判断相等可以用$hash$ 卡点:无 C++ Code: #i ...

  8. [洛谷P1501][国家集训队]Tree II

    题目大意:给一棵树,有四种操作: $+\;u\;v\;c:$将路径$u->v$区间加$c$ $-\;u_1\;v_1\;u_2\;v_2:$将边$u_1-v_1$切断,改成边$u_2-v_2$, ...

  9. codeforces ice cave

    /// /// 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 /// DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. ...

  10. hibernate用配置文件的方式实现orm

    本文主要讲用配置文件的方式讲如何把一个对象和数据库中的表关联起来,其实用配置文件本质是和用注解的方式是一样的. 思路:1.写一个domain对象(如Person.java) 2.写这个domain对象 ...