分类 wifidog流程 下的文章

WiFidog的认证页面的/login /auth /ping和/portal

我们在wifidog.conf 文件里可以看到auth server的相关信息,未修改的.conf包含两种auth server配置:
1)第一种:

AuthServer {
       Hostname                 (Mandatory; Default: NONE)
       SSLAvailable             (Optional; Default: no; Possible values: yes, no)
       SSLPort                  (Optional; Default: 443)
       HTTPPort                 (Optional; Default: 80)
       Path                     (Optional; Default: /wifidog/ Note:  The path must be both prefixed and suffixed by /.  Use a single / for server root.)
   LoginScriptPathFragment  (Optional; Default: login/? Note:  This is the script the user will be sent to for login.)
   PortalScriptPathFragment (Optional; Default: portal/? Note:  This is the script the user will be sent to after a successfull login.)
   MsgScriptPathFragment    (Optional; Default: gw_message.php? Note:  This is the script the user will be sent to upon error to read a readable message.)
   PingScriptPathFragment    (Optional; Default: ping/? Note:  This is the script the user will be sent to upon error to read a readable message.)
   AuthScriptPathFragment    (Optional; Default: auth/? Note:  This is the script the user will be sent to upon error to read a readable message.)
}

2)第二种:

AuthServer {
    Hostname auth.ilesansfil.org
    SSLAvailable yes
    Path /
}

很明显得第一种配置的比较多一些。
区别在于,第二种使用的是默认配置,在conf.h里可以看到相关的宏定义,且conf.h里默认的值和第一种注释里的值是相同的,即
LoginScriptPathFragment Default: login/
PortalScriptPathFragment Default: portal/
MsgScriptPathFragment Default: gw_message.php?
PingScriptPathFragment Default: ping/
AuthScriptPathFragment Default: auth/

这里我们来说下login portal ping auth到底是用来做什么的。
login: 用在登录协议http://auth_server/login/?gw_id=xxx&gw_address=xxx&gw_port=xxx&url=xxx,是路由器重定向浏览器对auth server 的login的访问。

auth: http://auth_server/auth/?stage=xxx&ip=xxx&mac=xxx& token=xxx&incoming=xxx&outgoing=xxx&gw_id=xxx, stage=login/logout/counter三种,路由器向auth server验证客户端的token。

ping:http://auth_server/ping/?gw_id=xxx&sys_uptime=xxx&sys_memfree&sys_load=xxx&wifidog_uptime=xxx,路由器定时向auth server发送自己的状态,证明自己是在工作的。

portal: http://auth_server/portal/?gw_id=xxx,认证成功后,路由器重定向客户端到auth server的portal。

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

wifidog 安装说明-wiki

条件检查:

1 基本的linux环境,并且熟练使用

2 内核中带有netfilter的linux系统

3 iptables 包

4 gcc编译器,其他的编译器可能也行,但是没有经过测试

5 从sourceforge 获得的最新的wifidog的源码

安装准备工作

确保一切正常运行再继续进行下一步安装wifidog!!

1)路由器能正常启动

2)路由器可以启动接口

3)路由器的路由正常运行

4)路由器可以连接到internet

5)dns可以设置运行

6)dhcp正常运行

7)ipt_mac.o内核模块必须提前加载

8)如果使用了NAT,路由器必须在iptables中正确的设置NAT/伪装 规则

9)wifi的客户的能够链接internet

以上条件在路由器启动或者重启后能自动的正常运行

开始安装

像任何开源的软件一样,先下载源码tarball,然后按照如下步骤安装 :

./autogen.sh

make

make install

在openwrt下安装wifidog:

mkdir ~/wifidog.openwrt
cd ~/wifidog.openwrt
wget http://downloads.openwrt.org/whiterussian/newest/OpenWrt-SDK-Linux-i686-1.tar.bz2
tar -jxvf OpenWrt-SDK-Linux-i686-1.tar.bz2
svn checkout https://dev.wifidog.org/svn/trunk/wifidog
cd wifidog
./autogen.sh
make ipk OPENWRTSDK=~/wifidog.openwrt/OpenWrt-SDK-Linux-i686-1

编译完成的包在:~/wifidog.openwrt/OpenWrt-SDK-Linux-i686-1/bin/packages

配置wifidog:编辑/etc/wifidog.conf

运行wifidog:

wifidog -f -d 7
  -f means to run in foreground (do not become a background daemon)
  -d 7 increases debug output level to the maximum
打开任意wifi的客户端,查看wifidog输出信息

本文章由 http://www.wifidog.pro/2015/01/26/wifidog%E5%AE%89%E8%A3%85-1.html 整理编辑,转载请注明出处

wifidog接口文档

ifidog是搭建无线热点认证系统的解决方案之一,他比nocat更适合互联网营销思路。目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux iptables防火墙实现接入用户的认证跳转和控制,在认证服务器方是通过php实现用户的认证流程和管理。
优点:有开源代码,可以很方便的搭建认证系统。
缺点:通过iptables方式实现,性能比较差,整体拉低了路由器的数据包处理速度,协议比较繁琐,对认证服务器的造成性能损耗比较大,在安全方面都是明文传输,有一定的安全隐患。
流程图:
wifidog-flow-2009.png

网关心跳协议
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=3861HTTP/1.0
User-Agent:cnrouterwifidog
Host:wifidog.pro

用户状态心跳协议
请求格式:
http://auth_server/auth/?
stage=
ip=
mac=
token=
incoming=
outgoing=
注意:
ip,mac,token为用户的基本信息,incoming/outgoing为用户的连接计数信息。
stage=counter|login|logout,分别表示:已认证,新认证用户,超时需要删除的用户。
回复格式:
Auth:状态码(注意中间冒号和状态码之间有个空格)
状态码:
0-AUTH_DENIED-Userfirewallusersaredeletedandtheuserremoved.
1-AUTH_ALLOWED-Userwasvalid,addfirewallrulesifnotpresent
例子:
GET/auth/?stage=counters&ip=7.0.0.107&mac=00:40:05:5F:44:43&token=4f473ae3ddc5c1c2165f7a0973c57a98&incoming=6031353&outgoing=827770HTTP/1.0
User-Agent:cnrouterwifidog
Host:wifidog.pro

跳转协议
对于新连接用户,路由器将其产生的任意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:cnrouterwifidog
Host:wifidog.pro

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

本文章由 http://www.wifidog.pro/2015/01/26/wifidog%E6%8E%A5%E5%8F%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://wxhhbdx.blog.51cto.com/2986356/1338059

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