分类 wifidog源码 下的文章

wifidog标准流程描述

一 认证流程描述
  i. Wifidog 运行之后建立一系列的防火墙规则,主要规则起到如下作用:

    1.阻断所有内网到外网的访问。

    2.开通内网到外网的 dns 访问。

    3.开通内网到认证服务器以及域名白名单的访问。

    4.对内网到外网 80 端口的访问转向到 wifidog 自己的 http 服务(2060 端口)。

  ii. 手机、pc 连接上来后,app 或者系统(安卓、ios 会自己连接到各自的服务器上来验证网络的连通性)会发起对外网的访问请求,dns 请求会被放过,然后对应的 80 端口的访问会被指向 2060 的 http 服务,其他的请求都会被拦截。
  iii. Wifidog 的 http 接到 web 请求后,基本上都会被指向 404 页面,404 页面会给客户端一个重定向返回(302),要求客户端重定向访问认证服务器的 login 页面,附加参数 gw_id、gw_address、gw_port、url。
  iv. 手机、pc 客户端加载、显示认证服务器的 login 页面,用户根据页面内容做相关的认证操作(qq 登录、微博登录、用户名密码登录、手机短信登录等多种登录方式) ,原则只有一个认证不成功就仍然让用户停留在认证服务器继续认证操作,认证成功给客户端一个 302 重定向返回,根据 login 接口提交上来的参数 gw_address、gw_port 跳转套 wifidog web 服务的/wifidog/auth 页面上,附带 token 和 url 参数。
  v. Wifidog 的 web 服务收到手机、pc 客户端的/wifidog/auth 请求后,会主动对认证服务器的 auth 接口发起一个验证请求, 附带参数 ip、 mac、 token、 stage=loginvi. 认证服务器的 auth 接口收到 wifidog 的请求, 要根据内部逻辑返回是否允许通过的应答 :

    Auth: 0 拒绝

    Auth: 1 允许

  vii. Wifidog 接收到验证结果后,如果拒绝访问,就会返回 302 给客户端,重定向到认证服务器的 gw_message 接口,附带 message=denied 参数,客户端的上网访问仍然会回到第二步骤;如果允许访问,则改动防火墙规则,开通改客户端的上网(至此客户端已经能够正常上网) ,然后返回 302 重点向给客户端,重定向到认证服务器的 portal 接口,附带参数 gw_id。

  viii. 认证服务器的的 portal 接口根据业务流成显示广告业或者做其他的跳转ix. 整个认证流程完成。

二 ping 心跳流程描述
  i. ping 接口 wifidog 检测认证服务器访问是否正常、并向认证服务器提交 wifidog的运行状态。
  ii. 定时 ping 认证服务器。
  iii. 提交的参数 gw_id、sys_uptime、sys_memfree、wifidog_uptime。

三 auth 心跳流程描述
  i. 和 ping 一样的频率定期请求认证服务器,并且有多少已认证客户端就发多少请求。
  ii. 用来向认证服务器提交客户端的状态以及执行认证服务的验证结果。
  iii. 提交的参数有:ip、mac、token、incoming、outgoing 、stage=counters。
  iv. 如果服务器返回拒绝,则 wifidog 改动防火墙规则,关闭该客户端的上网。

本文章由 http://www.wifidog.pro/2015/01/20/wifidog%E6%B5%81%E7%A8%8B-2.html 整理编辑,转载请注明出处

wifidog安装指南

适用于已安装了OpenWrt固件的无线路由器

  1. 系统需求
    硬件
  • 已安装了OpenWrt固件的无线路由器(典型的有Linksys WRT54G系列)
    软件

  • Wifidog
    你可以尝试执行以下命令安装Wifidog:

    opkg update # Optional
    opkg install wifidog

将无线路由器接入Internet。
设置并启用无线网络,即,使用无线路由器创建一个可用的Access Point。

  1. 在Web控制面板中创建热点
    登录到Web控制面板,访问http://cp.wiwiz.com/as/s/menu
    点击“我的热点”,在接下来的页面中点击“创建热点”。根据页面的提示完成各项设置,点击保存。
    你将会看到你刚创建热点的Hotspot ID。记下它,接下来的步骤将会用到它。

  2. 安装与设置HotSpot Builder Utility组件
    将一台PC机连接至你的无线路由器,用SSH方式连接到无线路由器。执行以下命令:

    cd; wget http://dl.wiwiz.com/hsbuilder-util-latest-OpenWrt.tar.gz
    cd /; tar -zxf /root/hsbuilder-util-latest-OpenWrt.tar.gz
    /usr/local/hsbuilder/hsbuilder_setup4openwrt.sh setup

然后按照提示完成设置。
特别地,你需要输入的Hotspot ID就是你在Web控制面板中创建的热点的Hotspot ID(不是热点的名称)。User Name是你在控制面板注册的用户名。

提示:
安装时你将会被提示输入External NIC 与 Internal NIC。External NIC 代表的是连接Internet的网络接口。Internal NIC 代表的是连接局域网的网络接口。如果你不确定,可以执行ifconfig命令,并从执行结果中找到它们。

现在,如果没有报错信息,那么安装已经完成了。
你可以使用一个Wi-Fi客户端(如带WLAN适配器的PC或者支持Wi-Fi的移动电话)测试一下你的热点:

  • 搜索可用Wi-Fi热点,并连接到你的热点。
  • 打开Web浏览器,输入任何一个HTTP开头的网址。如果你的热点的认证页面能够显示出来,就说明你的热点已经正常运转了。

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

在OpenWrt中安装Wifidog

  1. 系统需求
    硬件
  • 已安装了OpenWrt固件的无线路由器(典型的有Linksys WRT54G系列)
    软件

  • Wifidog
    你可以尝试执行以下命令安装Wifidog:

    opkg update # Optional
    opkg install wifidog

将无线路由器接入Internet。
设置并启用无线网络,即,使用无线路由器创建一个可用的Access Point。

  1. 在Web控制面板中创建热点
    登录到Web控制面板,访问http://cp.wiwiz.com/as/s/menu
    点击“我的热点”,在接下来的页面中点击“创建热点”。根据页面的提示完成各项设置,点击保存。
    你将会看到你刚创建热点的Hotspot ID。记下它,接下来的步骤将会用到它。

  2. 安装与设置HotSpot Builder Utility组件
    将一台PC机连接至你的无线路由器,用SSH方式连接到无线路由器。执行以下命令:

    cd; wget http://dl.wiwiz.com/hsbuilder-util-latest-OpenWrt.tar.gz
    cd /; tar -zxf /root/hsbuilder-util-latest-OpenWrt.tar.gz
    /usr/local/hsbuilder/hsbuilder_setup4openwrt.sh setup

然后按照提示完成设置。
特别地,你需要输入的Hotspot ID就是你在Web控制面板中创建的热点的Hotspot ID(不是热点的名称)。User Name是你在控制面板注册的用户名。

提示:
安装时你将会被提示输入External NIC 与 Internal NIC。External NIC 代表的是连接Internet的网络接口。Internal NIC 代表的是连接局域网的网络接口。如果你不确定,可以执行ifconfig命令,并从执行结果中找到它们。

现在,如果没有报错信息,那么安装已经完成了。
你可以使用一个Wi-Fi客户端(如带WLAN适配器的PC或者支持Wi-Fi的移动电话)测试一下你的热点:

  • 搜索可用Wi-Fi热点,并连接到你的热点。
  • 打开Web浏览器,输入任何一个HTTP开头的网址。如果你的热点的认证页面能够显示出来,就说明你的热点已经正常运转了。

本文章由 http://www.wifidog.pro/2015/01/19/openwrt-wifidog-1.html整理编辑,转载请注明出处

wifidog中命令组合代码测试

wifidog中命令组合代码测试,有需要的朋友可以参考下

/*************************************************************************
    > File Name: test.c
    > Author: NULL
    > Mail: 574889524@qq.com
    > Created Time: 2014年11月21日 星期五 20时22分18秒
 ************************************************************************/

#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include<stdio.h>
#define TABLE_WIFIDOG_TRUSTED "WiFiDog_$ID$_Trusted"

int safe_vasprintf(char **strp,const char *fmt,va_list ap)
{
    int retval;
    retval = vasprintf(strp,fmt,ap);
    if(retval == -1){
        printf("FAIL\n");
        exit(-1);
    }
    return retval;
}
int safe_asprintf(char **strp,const char *fmt,...)
{
    va_list ap;
    int retval;
    va_start(ap,fmt);
    retval = safe_vasprintf(strp,fmt,ap);/*这里要给strp分配内存*/
    va_end(ap);
    return retval;
}

int iptables_do_command(const char *format,...)
{
    va_list vlist;
    char *fmt_cmd;
    char *cmd;

    va_start(vlist,format);
    safe_vasprintf(&fmt_cmd,format,vlist);/*将每个参数组合到一起*/
    va_end(vlist);
    safe_asprintf(&cmd,"iptables %s",fmt_cmd);/*格式化输入到cmd*/
    printf("%s\n",cmd);
    free(fmt_cmd);/*释放两次分配的空间*/
    free(cmd);
    return 0;
}
int main()
{
    iptables_do_command("-t mangle -N " TABLE_WIFIDOG_TRUSTED);
    /*两个字符串合并,组成一个字符串*/
    return 0;
}

输出:

iptables -t mangle -N WiFiDog_$ID$_Trusted

本文章由 http://www.wifidog.pro/2015/01/19/wifidog%E5%91%BD%E4%BB%A4.html 整理编辑,转载请注明出处