华为H3C交换机+Radius+mysql Radius认证认证方案,嵌入式客户端代码,配置(中:嵌入式客户端代码)

本文介绍了一种嵌入式Radius认证方案,涉及华为H3C交换机与客户端的802.1x认证过程。客户端与交换机交互包括EAPOL-Start、Request/Identity、EAP-Response/Identity、EAP-Response/MD5 Challenge等步骤。文章提供开源代码参考,并解析了认证过程中关键报文的格式和处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的一个嵌入式Radius认证方案,分上中下,上:认证方案,中:嵌入式客户端代码 下:交换机和Radius配置

技术交流:1532709892@qq.com

代码参考  开源库: http://github.com/liuqun/8021xclient

一认证核心代码

客户端与交换机802.1x认证过程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

 

 

 

      

 

                                          802.1x认证过程流程图

  1. 客户端向交换发送连接请求,若在20次内没有接受到交换机的回应(Request/Identity报文),

退出连接

  1. 交换机收到连接请求后向交换机请求Identity,客户端发送用户名给交换机
  2. 交换机接受到用户名后,再次发送请求,请求密码
  3. 客户端将密码经过MD5加密后上送给交换机
  4. 交换机用客户端的用户名和密码进行认证,如果认证成功,开放端口,并向客户端发送

Success,每隔一段时间请求一次和客户端 握手,如果认证失败向客户端发送Failure

  1. 客户端获取交换机的认证结果,如果认证成功,回送一个握手协议包,如果认证失败,退出认证
  2. 如果客户端收到退出命令,向交换机发送Log-Off命令,退出认证

 

 

客户端主动发送连接请求(EAPOL-Start)报文格式:

客户端通过接口SendStartPkt()发送一个EAPOL-Start消息包表示开始一次802.1x连接。

EAPOL-Start消息通过标准的EAPOL协议封装,客户端请求数据包格式如下:

广播MAC地址+设备MAC地址+EAPOL报文(EAPOL-Start)

这里用一个长度为18的字符变量szpacket[18]发送EAPOL-Start消息。

    szPacket[0~5]:广播MAC地址

    szPacket[6~11]:设备MAC地址,通过GetMacFromDevice接口获取

    szPacket[12~13]:0X88,0X8e以太网协议类型(802.1x)

    szPacket[14]:  EAPOL协议版本

    szPacket[15]:  0X01(EAPOL-Start),EAPOL协议数据类型

szPacket [16~17]: 0X0(数据内容空),数据域长度

szPacket [18~]:数据内容

客户端主动发送Identity报文格式:

交换机收到请求报文(EAPOL-Start)后,发送一个请求帧(Request/Identity报文),要求客户端发送输入的用户名。客户端收到请求(Request/Identity),将用户名通过数据帧(EAP-Response/ Identity报文)送给交换机。

EAP-Response/ Identity报文数据包格式如下:

广播MAC地址(6位)

Ff:ff:ff:ff:ff:ff

设备MAC地址(6位)

00:09:f5:11:35:33

EAPOL

EAPOL Head

EAPOL Body[18~]

EAPOL-Packet

EAP: Code

     Indentifier

      Length

      Data(Type+data)

 

广播MAC地址+设备MAC地址+EAPOL报文(EAPOL-Packet)

当EAPOL报文为EAPOL-Packet时,表明EAPOL报文数据内容封装的是一个EAP数据包,

从数据的第18位开始为EAP数据内容。

这里用一个长度为128的字符变量response[128]发送EAPOL- Packet消息,EAP报文内容如下:

szResponse [15]:   0X0(EAPOL-Packet),认证信息类型

szResponse [18]:    0X02(Response),EAP帧类型(Code)

szResponse [19]:    0X02(Response),用于匹配Request 和Response(Indentifier)

szResponse [22]:    0X01(IDENTITY),Data Type

szResponse [26~29]: IP地址

//szResponse [32~59]: 28字节版本号 版本号认证会导致错误,这里选择不认证版本号

szResponse [62~]:用户名

客户端主动发送MD5报文格式:

交换机收到客户端的数据帧(EAP-Response/Identity报文),没有上传到服务器,而是随机生成一个加密字,并将加密字通过(Request/Identity)交给客户端。客户端接收到加密字后,用该加密字对密码部分进行加密生成EAP-Response/MD5 Challenge报文给交换机。

EAP-Response/MD5 Challenge内容报文如下:

广播MAC地址+设备MAC地址+EAPOL报文(EAPOL-Packet)

当EAPOL报文为EAPOL-Packet时,表明EAPOL报文数据内容封装的是一个EAP数据包,

从数据的第18位开始为EAP数据内容。

这里用一个长度为128的字符变量response[128]发送EAPOL- Packet消息,EAP报文内容如下:

szResponse [15]:    0X0(EAPOL-Packet),认证信息类型

szResponse [18]:    0X02(Response),EAP帧类型(Code)

szResponse [19]:    0X02(Response),用于匹配Request 和Response(Indentifier)

szResponse [23]:    16 ,length

szResponse [24~39]: Passwd+随机加密码MD5加密后转化成的128位信息

szResponse [40~]: 用户名

交换机收到加密密码后,将用户名,密码,加密字封装成Radius(Acces-Request)报文,发送给Radius服务器处理认证。

Radiusclient通过pcap_next_ex接口不断的抓取握手认证包,获取连接状态。

802.1x协议包内容 captured[18]=3代表连接成功,captured[18]=4代表连接失败。

客户端主动断开连接请求(EAP-LogOff)报文格式:

用户可以直接发送EAPOL_Logoff报文给交换机,主动结束认证,交换机将端口从授权状态改变成未授权状态。

客户端通过接口SendStopPkt发送一个EAPOL-Logoff消息包终止当前802.1x连接。

EAPOL-Logoff消息通过标准的EAPOL协议封装,客户端请求数据包格式如下:

广播MAC地址+设备MAC地址+EAPOL报文(EAPOL-Logoff)

这里用一个长度为18的字符变量packet[18]发送EAPOL-Logoff消息。

  szPacket[0~5]:广播MAC地址

  szPacket [12~13]:0X88,0X8e以太网协议类型(802.1x)

  szPacket [14]: EAPOL协议版本

  szPacket [15]: 0X02(data_type=EAPOL-Logoff),EAPOL协议数据类型

int Authentication(const char *szUserName, const char *szPassWord, const char *szDeviceName)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值