用python实现华为PORTAL协议V2

本文介绍Portal协议的工作原理及其实现方法,包括协议交互流程、BAS设备配置及Python代码实现细节。适用于希望深入了解Portal协议及其应用的读者。
该文章已生成可运行项目,

一、什么是PORAL协议

Portal协议提供了这样一种方式。当用户未认证时,控制用户只能访问某些特定的网络资源。当用户需要访问互联网更多资源的时候,必须进行认证。

它不需要用户安装特定的客户端,只需要通过浏览器,当用户没有认证时,通过HTTP重定向到特定的认证页面,引导用户完成认证的过程。并在此过程中开展广告、社区服务等个性化业务。

《华为公司宽带产品Portal协议标准(V2.0)》和《中移动PORTAL协议规范》。这两种标准,在协议上是一脉相承的。

华为的V1.0标准和CMCC的标准基本一样。华为的V2.0标准是在V1.0的标准上稍微有一部分改动。但是引入了报文验证字之后,V2.0标准与V1.0标准完全不兼容。

CMCC的标准还是保持跟华为V1.0标准一致。
本文用PYTHON实现的是华为PORTAL协议V2.0,并且在华为NE40E上测试通过

二、协议交互过程

具体的交互可以参考华为公司宽带产品Portal协议标准(V2.0),(https://wenku.baidu.com/view/df6bb9ffd0f34693daef5ef7ba0d4a7302766c8b.html)这是百度文库里面的,可以免费阅读,但下载需要收费。这里只是简单的说一下:

1、用户访问互联网,BAS当发现用户访问白名单之外的内容时,会把用户的HTTP请求重定向到预先配置的PORTAL WEB服务器。

2、用户的WEB上输入帐号和密码。交点击提交。

3、PORTAL 服务器收到用户的提交后,会按照PORTAL协议跟BAS进行如下交互:

    3.1 PORTAL 服务器发送请求挑战REQ_CHALLENGE(CHAP才需要,PAP认证不需要,但本文的实现是使用CHAP的)给BAS。

    3.2 BAS根据请求报文里面的用户IP生成相应的challenge,并通过ACK_CHALLENGE发回给PORTAL 服务器

    3.3 PORTAL 服务器 接收BAS发过来的ACK_CHALLENGE,并使用该challenge,结合之前收到的用户名和密码,发送认证请求REQ_AUTH给BAS

    3.4 BAS收到用户名和密码后,把这些信息发给配置的RADIUS服务器进行认证,并通过ACK_AUTH返回认证结果给PORTAL 服务器

    3.5 PORTAL 服务器接收BAS发过来的ACK_AUTH,并发送AFF_ACK_AUTH进行确认

至此PORTAL认证完成,用户可以正常访问互联网。

三、BAS上的配置(以华为NE40E做为示例)

BAS上的配置稍微有点复杂,请参照华为数通的配置参考
//定义IP地址池
ip pool myippool bas local
 gateway 2.2.2.1 255.255.255.0
 section 0 2.2.2.2 2.2.2.254
 dns-server 114.114.114.114
 
//定义用户组,在白名单里面可以引用这个用户组
 user-group wlan
 
//定义白名单,不需要认证就可以访问的IP
acl number 6100
 rule 1 permit ip source user-group wlan destination ip-address 1.1.1.1 0 //允许用户访问PORTAL WEB服务器
 rule 1 permit ip source user-group wlan destination ip-address 114.114.114.114 0 //允许用户访问DNS
 rule 15 deny ip source user-group wlan destination ip-address 116.8.0.1 0

//定义互联网资源
acl number 6101
 rule 15 permit ip source user-group wlan
 
//定义流分类
traffic classifier wlan_pre_auth operator or
 if-match acl 6100
traffic classifier wlan_pre_auth_2 operator or
 if-match acl 6101

//定义流动作
traffic behavior http-redirect
 http-redirect
traffic behavior permit


//定义全局策略
traffic policy Global_inbound_policy
 classifier wlan_pre_auth behavior permit
 classifier wlan_pre_auth_2 behavior http-redirect

//应用全局策略
traffic-policy Global_inbound_policy inbound
#

//配置认证前域
domain pre.gl
  authentication-scheme default0  //认证前不计费,不认证
  accounting-scheme default0
  ip-pool myippool //之前配置的地址池

  qos-profile B_4M inbound //进行适当的限速
  qos-profile B_4M outbound
  user-group wlan //配置用户组,这样可以在全局策略里使用基于用户的访问列表进行访问控制
  idle-cut 10 1000 //配置空闲策略,以避免用户长期占用地址
  web-server 1.1.1.1 //配置PORTAL服务器地址
  web-server url http://1.1.1.1:8889 //这里面配置重定向的URL,这个URL的IP一定要在白名单里面,并且可以跟上面的PORTAL服务器地址不一样
  http-hostcar enable

//配置全局WEB PORTAL服务
web-auth-server 1.1.1.1 port 50100 key simple yourpass
http-reply exclude destination-ip 1.1.1.1

//配置认证后的域
//先要配置RADIUS服务器
radius-server group myradius.gl
 radius-se

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值