我们学校使用的是华为的上网认证系统,应该也有很多学校也是使用这套系统吧。
网上有很详细的关于802.1x的说明。简单说一下。802.1x是使用的是EAP协议,在Rfc3748中有关于Eap详细的说明。不过在具体的实现上面每一公司都不同,总体的结构和交互的时序是符合标准的
。发送的数据帧长度是60。可建立以下结构:
typedef
struct
Exauthen
{
u_char code;
// 0x01,请求request,switch对的request;
// 0x02 表示这是你的应答;
// 0x03 成功
// 0x04失败;
u_char id;
// 序号交换机问你n你就答n
u_char length[ 2 ];
// exauthen长度,当然要去掉后面的00的长度
// 与authen.length的长度一样
u_char type;
// 0x01 identity 0x1504+用户名,
// 或者 0x1504+ip+用户名 填充content 华为自己弄的,标准中没有ip的事,后面可以看出其实这也不过是个鸡肋
// 具体要根据AAA服务器的配置
// 0x07 0x07+密码+用户名 填充content 华为自己定的,Rfc3748没有这个
// 在新的客户端中,使用了md5加密密码
u_char content[ 37 ]; // 内容,剩的用00填充
} Exauthen;
typedef struct Authen
{
u_char version;
// 版本,0x01
u_char type;
// 类型0x00 eappack 需要填充exauthen,如果是后面两个就不要了管exauthen;
// 0x01 start ;
{
u_char code;
// 0x01,请求request,switch对的request;
// 0x02 表示这是你的应答;
// 0x03 成功
// 0x04失败;
u_char id;
// 序号交换机问你n你就答n
u_char length[ 2 ];
// exauthen长度,当然要去掉后面的00的长度
// 与authen.length的长度一样
u_char type;
// 0x01 identity 0x1504+用户名,
// 或者 0x1504+ip+用户名 填充content 华为自己弄的,标准中没有ip的事,后面可以看出其实这也不过是个鸡肋
// 具体要根据AAA服务器的配置
// 0x07 0x07+密码+用户名 填充content 华为自己定的,Rfc3748没有这个
// 在新的客户端中,使用了md5加密密码
u_char content[ 37 ]; // 内容,剩的用00填充
} Exauthen;
typedef struct Authen
{
u_char version;
// 版本,0x01
u_char type;
// 类型0x00 eappack 需要填充exauthen,如果是后面两个就不要了管exauthen;
// 0x01 start ;