? ? 以RTL 8197为例,直接在内核实现了HTTP REDIRECT重定向功能:当下挂设备部在白名单范围内,则直接返回门户页面给用户。该功能可以被用于路由器用户上网认证需求的实现
?? ?主要外部接口: ?? ?/proc/http_redirect/enable?? ??? ??? ?启用禁用 ?? ?/proc/http_redirect/CaptivePortalURL?? ?TR98版本门户URL设定 ?? ?/proc/http_redirect/AllowedList?? ??? ??? ?TR98版本允许列表不被强制门户:IP列表 ?? ?/proc/http_redirect/url?? ??? ??? ??? ?非TR98版本门户URL设定 ?? ?/proc/http_redirect/client_list?? ??? ?非TR98版本允许列表不被强制门户:mac列表 ?? ?/proc/http_redirect/max_idle_time?? ?非TR98版本允许列表成员超时时间:超过指定时间会被删除(配合外部功能实现为超时重新认证)
?? ?内部实现: ?? ??? ?与DNS TRAP功能类似,主要实现部分在net bridge。当数据报文经过桥时br_handle_frame,在功能启用的情况下: ?? ??? ?先检查是否为一个合法的http get请求,如果时则匹配是否不在白名单范围内,再检查当前的请求是否就是强制门户页面(子页通过url字段或host字段检测,目前没有用到refer字段)?? ?--refer字段在此主要用于级联信任,但当前的网络这种级联信任不太可靠,也与本身请求的页面相差太远 ?? ??? ?如果上述都是匹配的,在send_redirect中还做了路由安全检查,这样可以避免网络不通的情况下推送门户 ?? ??? ?接下来则是封装回报: ?? ??? ??? ?在原有报文的基础上copy一个新报文进行修改(data部分和newskb结构体)后发送 ?? ??? ??? ?修改原有报文为rst报文,断开之前的连接?? ?--这点较为重要
|