分类 wifidog分析 下的文章

wifidog 接口详解

概述
wifidog:是搭建无线热点认证系统的解决方案之一,他比nocat更适合互联网营销思路。目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux iptables防火墙实现接入用户的认证跳转和控制,在认证服务器方是通过php实现用户的认证流程和管理。

优点:有开源代码,可以很方便的搭建认证系统。
缺点:通过iptables方式实现,性能比较差,整体拉低了路由器的数据包处理速度,协议比较繁琐,对认证服务器的造成性能损耗比较大,在安全方面都是明文传输,有一定的安全隐患。

认证流程
注意:
热点服务器地址为:auth_server
热点服务器路径为: /

网关心跳协议
Wifidog将ping协议作为心跳机制向认证服务器发送当前状态信息。实现认证服务器和每个节点的状态双向健康监测的机制。
请求信息:
http://auth_sever/ping/?
gw_id=%s
sys_load=%lu
sys_memfree=%u
sys_load=%.2f
wifidog_uptime=%lu
回复格式:Pong
例子:
GET /ping/? gw_id=001217DA42D2&sys_uptime=742725&sys_memfree=2604&sys_load=0.03&wifidog_uptime=3861 HTTP/1.0
User-Agent:cnrouter wifidog
Host: auth.cnrouter.com

用户状态心跳协议
请求格式:
http://auth_server/auth/? (因文明发贴将:换为&)
stage=
ip=
mac=
token=
incoming=
outgoing=

注意:
ip,mac,token为用户的基本信息,incoming/outgoing为用户的连接计数信息。
stage=counter|login|logout,分别表示:已认证,新认证用户,超时需要删除的用户。
回复格式:
Auth: 状态码 (注意 中间冒号和状态码之间有个空格)
状态码:
0 - AUTH_DENIED - User firewall users are deleted and the user removed.
1 - AUTH_ALLOWED - User was valid, add firewall rules if not present
例子:
GET /auth/?stage=counters&ip=7.0.0.107&mac=00:40:05:5F:44:43&token=4f473ae3ddc5c1c2165f7a0973c57a98&incoming=6031353&outgoing=827770 HTTP/1.0
User-Agent:cnrouter wifidog
Host: auth.cnrouter.com

跳转协议
对于新连接用户,路由器将其产生的任意url请求通过302重定向到认证平台.
请求格式:
http&//auth_server/login/? (因文明发贴将:换为&)
gw_id=
gw_address=
gw_port=
mac=
url=
例子:
GET /login/?gw_id=808100949391&gw_address=192.168.81.1&gw_port=80&mac=aa:bb:cc:dd:cc:ee&url=http&//www.sina.com.cn/ HTTP/1.0
User-Agent:cnrouter wifidog
Host: auth.cnrouter.com

注册协议
平台确定成功注册用户,开通互联网权限,将用户请求重定向到路由器,完成注册。
请求格式:
http://gw_ip/wifidog/auth?
token=
例子:
GET wifidog/auth?token=12312412124
User-Agent:iphone
Host:路由器ip
注册请求成功,以307的方式跳转平台的 portal/?gw_id=

本文章由 http://www.wifidog.pro/2014/12/19/wifidog-%E6%8E%A5%E5%8F%A3%E8%AF%A6%E8%A7%A3.html整理编辑,转载请注明出处

wifidog认证

前段时间使用wifidog进行wifi强制认证,现在做个小结。
1.首先简单说说wifidog认证的过程
客户端首次连接到wifi后,浏览器请求将会被重定向到:
login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s
验证通过后,客户端被重定向到网关,url格式如下:
http://网关地址:网关端口/wifidog/auth?token=
wifidong会启动一个线程周期性地报告每一个用户的状态信息,并通过如下地址发送给认证
服务器:
auth_server:/auth/?stage=
ip=
mac=
token=
incoming=
outgoing=
认证服务器根据该状态信息决定是否允许该用户继续连接,并回复网关,回复格式为:Auth:状态码,
如:Auth:1
常用状态码:
0:AUTH_DENIED,表示拒绝
1:AUTH_ALLOWED,验证通过
验证通过后,将重定向到如下地址:
portal/?gw_id=%s
wifidog的ping协议
wifidog通过ping协议将当前状态信息发送给认证服务器,发送地址为:
http://auth_sever/ping/?
gw_id=%s
sys_uptime=%lu
sys_memfree=%u
sys_load=%.2f
wifidog_uptime=%lu
认证服务器须返回一个“Pong”作为回应。
2.实战应用
struts配置文件:

<package name="index" namespace="/" extends="interceptorMy,struts-default">
<action name="login/" class="goodsAction" method="login">
<result name="success" type="redirect">/Login/index.jsp</result>
<result name="input">/error.jsp</result>
</action>
<action name="ping/" class="goodsAction" method="ping">
</action>
<action name="auth/" class="goodsAction" method="auth">
</action>
<action name="portal/" class="goodsAction" method="portal">
</action>
</package>

Action方法:

public String login() {
    try{
        System.out.println("login start!");
                System.out.println("gw_port:"+gw_port);
        System.out.println("login end!");                                                                                                                                                                                                                                                                                                                       
     }
    catch(Exception e)
    {
        e.printStackTrace();
        return INPUT;
    }
    return "success";
}
public void ping() {
    try{
        System.out.println("ping start!");
        System.out.println(gw_id);
        ServletActionContext.getResponse().getWriter().write("Pong");
        System.out.println("ping end!");
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
public void portal() {
    try{
        System.out.println("portal start");
        System.out.println("protal"+token);
        ServletActionContext.getResponse().sendRedirect("/demo/listAction");
        System.out.println("portal end");
     }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
public void auth() {
    try{
        System.out.println("auth start!");
        System.out.println("mac"+mac);
        System.out.println("stage"+stage);
        System.out.println("token"+token);
        ServletActionContext.getResponse().getWriter().write("Auth: 1");
        System.out.println("auth end!");                                                                                                                                                                                                                                                                                                                       
     }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

/Login/index.jsp代码:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
DateFormat format=new SimpleDateFormat("yyMMddHHmmss");
String formatData=format.format(new Date());
int ramdom=new Random().nextInt(1000);
String token=formatData+ramdom;
if(session.getAttribute("token")==null)
   session.setAttribute("token",token);

%>
<form method="GET" action='http://192.168.1.1:2060/wifidog/auth'>
<input type='hidden' name='token' value="<s:property value="#session.token" />" />
<input type='submit' value='Welcome!'/>
</form>

上面的192.168.1.1为网关的ip,2060为网关端口。
当然,完全可以在处理完login后直接跳到该地址。我们这里为演示其认证流程,故跳到该页面
效果:
客户端连接到wifi后,打开任何连接均跳到上面的index.jsp中,点击"Welcome"后,跳到/demo/listAction,即我们的目标地址。此后点击其他连接将不再拦截。
提示:安装wifidog的路由器必须可以访问Internet,否则wifidog拦截失败,无法跳到我们设定的页面。

本文章由 http://www.wifidog.pro/2014/12/18/wifidog-%E8%AE%A4%E8%AF%81.html 整理编辑,转载请注明出处

wifidog 稳定性测试

最近很多网友都说wifidog原版不是很稳定,那么怎么测试稳定性?
测试方法有两种:1是通过手机登陆网站;2是通过软件发送多个连接请求来达到测试wifidog处理请求的能力,也就是其稳定性。
测试环境:将刷好的带wifidog认证的路由接入Internet和测试机(电脑或者手机)。使用电脑连接到路由后台,以调试模式运行wifidog,以便随时监控wifidog。
测试条件:wifidog启动中并且测试机没有进行过认证。
预期结果:wifidog死掉或者重启。
方法一:通过多台手机登录网站发送连接请求(登录新浪视频和搜狐视频会不停地发送连接请求),查看后台监控wifidog异常,增加手机链接到测试路由并登陆网站直到wifidog死掉或者重启。
方法二:通过http_load软件发送网站连接请求,查看后台监控wifidog异常,逐渐增加发送连接请求次数直到wifidog死掉或者重启。

本文章由 http://www.wifidog.pro/2014/12/18/wifidog-%E7%A8%B3%E5%AE%9A%E6%80%A7.html 整理编辑,转载请注明出处

wifidog 小知识点

wifidog 用于无线热点的认证,它是下一代取代NoCat 的软件。
1)和NoCat相比,wifidog 网关协议它更小,有更少的依赖,并运行在嵌入式设备;在认证服务器端,它更多的是可定制的,并且是面向资本基础设施建设门户网站和社区的目的;实践方面,nocat 需要打开一个窗口来保持连接,而wifidog,不用。

2)那么wifidog是怎么工作呢?
网关协议使用防火墙规则来控制通过路由器的流量,当一个用户试图访问网络时,网关将会把浏览器导向认证服务器,在认证服务器上他们可以登录或注册,然后网关和认证服务器沟通是否允许用户访问网络。网关本身也会每隔X分钟向认证服务器发包,表明网关还在工作。细节可以参考wifidog 的流程图:
FlowDiagram.png

3)网关协议运行在具有Netfilter + iptables 的Linux机器上。认证服务器运行在任何支持PHP的Web服务器。当然网关协议和认证服务器可以同时安装在一个linux 机器上。

4)wifidog 认证是不区分有线无线的

5)wifidog 的网关协议和认证服务器都是可以修改的

6)确保ipt_mac.ko和ipt_mark.ko内核模块已经insmod,这些模块都是iptables 的可选部分,iptables这些部分默认不是打开的。

7)auth server交互可以使用xml或者json格式

本文章由 http://www.wifidog.pro/2014/12/18/wifidog-%E6%B3%A8%E6%84%8F%E7%82%B9.html 整理编辑,转载请注明出处