精华内容
下载资源
问答
  • wifidog-ng-authserver() 一个简单的身份验证服务器,用于wifidog-ng进行测试 部署服务器 根据您自己的平台下载编译的文件 然后解压缩文件 tar zxvf wifidog-ng-authserver-x64.tar.gz 跑步 ./wifidog-ng-...
  • 集客云搭建wifidog的文档后台编程案例代码,集客云平台是一个智能路由器营销平台,可以自行定制云端后台效果
  • ApFree WiFiDog是用于HTTP的高性能强制门户解决方案,主要用于平台。 apfree-wifidog的增强 实际上,标题应该是我们选择apfree-wifidog的原因,原因如下: 稳定的 apfree-wifidog被广泛应用于商业场景中的数以万计...
  • 先来说说什么是热点认证系统,如果你有用过酒店或者机场的wifi,当你连上网络后试图去浏览某些页面的时候就会被从定向到一个特定的页面要求你登录啊什 么的,是的,这就是热点登陆系统,可能也可以叫做wifi login ...

    先来说说什么是热点认证系统,如果你有用过酒店或者机场的wifi,当你连上网络后试图去浏览某些页面的时候就会被从定向到一个特定的页面要求你登录啊什 么的,是的,这就是热点登陆系统,可能也可以叫做wifi login portal。不过是什么,如果你理解了这概念,或者觉得有用,那么我们就来实际的搭建一下吧。

    准备工作:

    1、一个支持ddwrt的路由器,关于如何得到这个路由器以及那些是兼容的请上ddwrt官网自行搜索,个人比较推荐的是上tb买个二手的linksys wrt54g的路由器,一般这样的一个机器都有被改造过,扩充flash容量以便能安装完全版的ddwrt固件。所以下文将不会讲如何安装ddwrt固 件,其实我只是自己也没安装过罢了。。

    2、internet环境(其实不连应该也没什么关系,不过我没测试过)。首先有一点很重要的是,如果你把路由器只接个lan口当做交换机来用的话是无法成功的,所以这里我们必须在wan口上插根网线,并在设置里配置好二级路由,开启dhcp服务。

    3、一台机器,通过lan口连接路由器,用来配置鉴权服务器。

    准备完成后,举例配置如下:

    ddwrt路由器 ip:192.168.11.1

    鉴权服务器ip:192.168.11.128

    就可以进行配置了。先配置服务器吧,wifidog官网上说使用了新的验证服务器authpuppy,于是就下载之,之后如果你想省去麻烦的php和mysql等等配置工作,建议直接使用xampp。

    然后把解压的文件夹authpuppy扔到xampp默认的访问目录htdocs下,修改authpuppy部分目录的权限(详细的参看官网设置,这里就整个目录777了)。

    开打浏览器输入localhost/authpuppy/web/后来到安装页面,根据要求安装就是了,这部应该没什么问题,需要你建立数据库就按照要求建个就是了,用户名则可以随便分配。

    安装完之后用新建的管理员账号登陆,选择manage node,新建一个node,注意这里有个GW ID的设置,随便设个,但必须在路由器端的wifidog设置中也使用这个id,不然无法进行认证。到此为止鉴权服务器的简单功能应该算是配置完成了,之 后加入复杂的功能等等则可以通过官网提供的插件和api或者自己看源码理解,可能我下次会说到,这里就不提了。

    接着是路由器的配置,点开”服务”标签,二级标签选”热点”,在里面会看到被禁用的狗狗,开启之,依下设置(图片稍后奉上):

    网管ID,就是前面服务器设的那个GW ID

    服务器名,随意了

    下面一些默认不要动

    鉴权服务器主机名,安装authpuppy服务器的ip地址192.168.11.128

    SSL服务禁用

    端口,还是看你服务器的配置,默认是80。

    鉴权服务器路径,/authpuppy/web/

    填写完成后按应用就可以了。这时候你可以登录到路由器上的wifidog看看dog是否正常工作。在浏览器中输入:192.168.11.1:2060/wifidog/status

    状态如图(继续稍后。。。)就说明成功了,不过此时还有一部非常重要的事要做,那就是进入路由器管理菜单,重启路由器,之前一直由于这个原因搞了我很久。

    测试,随便找个带wifi的电脑或手机,连上我们设的热点后,任意访问个页面,此时如果页面成功跳转了那么便大功告成,没有的话检测看看原因,一般如果wifidog状态正常的话是不会出问题的。

    over~其实配置起来还是蛮简单的,关键还是在于后续的开发和管理上面

    http://blog.csdn.net/sdvch/article/details/16350747

    转自:http://www.kissthink.com/archive/-d-d-w-r-t–w-i-f-i-d-o-g-da-jian-re-dian-ren-zheng-xi-tong–wu-xian-lu-you-qi-w-e-b-ren-zheng-.html

    展开全文
  • 利用Wifidog实现微信wifi连接

    万次阅读 2017-02-09 08:13:59
    前言 大家如果有用公共场合wifi的习惯,想必都有过如下的体验。 这就是利用微信身份来进行wifi连接认证,主要目的...在进行改造之前请务必要看微信公众平台开发文档的微信连wifi,后面提到的相关设涉及微信公众平台开发

    前言

    大家如果有用公共场合wifi的习惯,想必都有过如下的体验。

    这就是利用微信身份来进行wifi连接认证,主要目的是商家为了吸引顾客,推广其公众号。别的也不多说,下面就来讲一讲怎么实现这样的wifi认证方式。

    本篇文章要讲的是portal型路由设备(具体就是OpenWrt路由)的改造实现。在进行改造之前请务必要看微信公众平台开发文档的微信连wifi,后面提到的相关设涉及微信公众平台开发的相关术语、参数不再一一解释。

    微信wifi认证用户操作流程

    简单的讲(无技术实现),通过微信连wifi的流程(手机端):

    1. 用户连上无密码的热点,请求一个链接
    2. 路由器返回个用户一个portal页面。
    3. 用户在portal页点击微信连WiFi按钮,唤起手机微信。
    4. 微信显示提供热点的公众号,用户点击立即连接后向开发者的认证服务器进行认证。
    5. 认证通过,微信提示连接成功并转跳公众号预设的主页。

    对于用户而言,前面是TA要走的流程,对于开发者而言,要搞清楚每一步路由器、微信、认证服务器这三者到底做了什么,之间有什么关系。要想清楚这些,首先需要了解wifidog。

    wifidog认证处理流程

    wifidog的介绍就省略掉,相信看这篇文章的人都知道,直接进入正题。wifidog的认证有五种向认证服务器发送的协议,一种自己接受协议,虽说是协议,不过是不同的URL罢了。
    例如:192.168.1.2:9408/login/?mac=xx&gw_id=**

    协议默认路径作用
    Loginlogin/?用于登录时
    Authauth/?用于初次认证和心跳认证
    Pingping/?用于路由器心跳
    Portalportal/?登录成功跳转
    Msggw_message.php?用于出错时用于展示给用户信息

    PS:官方画的这个图真的好奇葩,委屈下看官的脖子。或者可以转动屏幕,最好发到手机上看。

    下面对这个流程图做个解释:

    1. 客户端发送一个请求,请求被转发到认证服务器(AuthServer)的Login协议的URL上。这个过程中,具体情况是当客户端向路由器发送一个HTTP时,OpenWrt中的iptables预定义的规则(在wifidog启动时写入规则)将所有请求转发到wifidog监听的地址(默认端口是2060)。当然配置文件中可以设置白名单,保证白名单列表的正常连接。再接着wifidog将向客户端返回302重定向,location的url如下,客户端将请求这个地址。

      
             
      1
      2
      3
      4
      5
      
             
      http://auth_server/login/?
      gw_id=[GatewaylD, default: "default]&
      gw_address=[GatewayAddress, internal IP of router]&
      gw_port=[GatewayPort, port that wifidog Gateway is listening on]&
      ur1=[user requested url]

      在配置文件中如果不设GatewayID,wifidog会将GatewayInterface的mac地址去掉冒号当做GatewayID。

      If none is supplied, the mac address of the GatewayInterface interface will be used,without the : separators

      如图前面流程图所示,每个参数都给出了解释,很清楚。当然url是没有换行的。

    2. 服务器收到login请求后,返回一个登录页面,用户提交表单(假如有的话)。

    3. 服务器处理表单,保存表单信息,生成一个token。向客户端返回302重定向,重定向的location是http://GatewayIP:GatewayPort/wifidog/auth?token=token,然后客户端向wifidog请求这个url。
    4. wifidog收到请求后取得token,并向AuthServer发送Auth请求,url如下所示,之后认证服务器取得参数并判断是否认证通过。

      
             
      1
      2
      3
      4
      5
      6
      7
      
             
      http://auth_server/auth/?
      stage=[login|counters]&
      ip=[client ip]&
      mac=[client mac]&
      token=[token]&
      incoming=[in data usage]&
      outgoing=[out data usage]
      • stage有两个值login表示登录认证,counters表示计数(心跳)认证。
      • incoming和outgoing是从连接开始到当前的总量,不是每次auth的值。

        AuthServer返回是否认证成功时,若成功,返回Auth: 1,若不成功,返回Auth: 0

    5. 若认证成功,wifidog会重定向客户端到portal页,url如:http://auth_server/portal/?gw_id=%s
    6. Ping协议:在每次wifidog启动的时候都会首先通过ping协议判断某认证服务器(可以有多个)是否在线,如果是Down状态就会尝试下一个。url如下:

      
             
      1
      2
      3
      4
      5
      6
      
             
      http://auth_sever/ping/?
      gw_id=%s&
      sys_uptime=%lu&
      sys_memfree=%u&
      sys_load=%.2f&
      wifidog_uptime=%lu
    7. 若验证失败,则会根据失败原因跳转至如下页面

      
             
      1
      
             
      gw_message.php?message=[denied|activate|failed_validation]

    加入微信认证的流程

    要想比较容易的理解这个流程,需要仔细阅读Wi-Fi硬件鉴权协议接口说明

    为了方便起见,把微信的认证流程图粘了过来。

    结合微信的认证流程图和前面wifidog的认证流程,我们应该会有一些如何结合两者的想法。

    1. 手机选择SSID,无密码,连接。
    2. 手机系统尝试打开一个URL来确定网络可用(或者手动打开一个链接),路由的iptables转发请求到wifidog,wifidog将请求重定向到AuthServer,并加入参数。(参见Login协议)
    3. AuthServer返回微信portal页,页面中包含获得微信ticket的参数,包括appId,extend,timestamp,shopId,authUrl,mac,ssid,bssid,secretKey以及sign即对前面参数md5后的值。(参数后面再解释)
      注意此处有坑:
      • 此portal非wifidog认证中的portal,在结合微信的认证中wifidog的portal不会用到。
      • md5函数的结果中字母一定要是小写
    4. 点击portal页中的呼起微信连wifi按钮。
      • 首先portal页面中的js代码会向微信服务器发送Ajax请求,就是把要获取ticket的参数传过去。
      • 微信服务器验证参数和sign匹配,返回唤起微信所需要的ticket。
      • portal页面将通过微信的Schema:weixin://connectToFreeWifi/ticket=xx呼起微信。(有的浏览器不支持打开外部应用,最好用系统自带浏览器)
      • 微信连接微信服务器,核对ticket,成功则返回给微信用户的extend,openId,tid,然后微信会打开前置的连接wifi页(如图1中的连接前页)。
    5. 点击连接,向AuthServer发起请求认证,参数包括extend,openId,tid,AuthServer返回AC(Access Control)结果,如果通过要返回302重定向到wifidog的auth上,也就是wifidog认证流程中的第3步,重定向的location为http://GatewayIP:GatewayPort/wifidog/auth?token=token
    6. 微信请求重定向的链接,wifidog收到请求并取得token,发起向AuthServer的认证。若认证成功,微信显示连接成功页面。不成功则连接失败。
    7. 在连接成功页面点击完成转跳到公众号预设的home页。连接成功也也可以关注公众号。

    对于关注公众号可以联网,取消关注断网:

    • 可以让用户提前关注公众号,在第5步时判断是否有粉丝关系,有即通过否则拒绝。这可以做到关注了公众号可以联网。
    • 要想做到取消关注即断网需要在认证成功之后的auth心跳时进行判断,具体怎么判断是否取消关注,是每次查询微信接口还是用户取消关注微信服务器会给你个回调,这个我还没研究。

    关于实现的简单说明

    把认证流程搞清楚之后,有开发能力的人基本就不用往下看了,本文也是针对于有一定开发能力的人,关于实现不会像教程一样详细,主要是提几个关键点。

    wifidog客户端

    安装wifidog

    首先在OpenWrt中安装wifidog,如果是开发用的话安装repository中的就可以了。如果是用于生产的话需要对wifidog进行一些修改然后编译成自己需要的包,这里可以参考 WiFiDog 多线程优化思路

    
         
    1
    2
    
         
    opkg update
    opkg install wifidog

    开机自启 /etc/init.d/wifidog enable
    启动服务 /etc/init.d/wifidog start

    配置文件修改

    wifidog默认配置文件在/etc/wifidog.conf,最好是要通读整个配置文件,也不是很多。

    1. 修改GatewayID,位置大概在15行
      GatewayID用来表示这个wifidog网关的,前面也提到过,注释掉着一行的话wifidog会取GatewayInterface的mac地址去掉冒号(separators)作为网关ID,如果一个路由上只运行一个wifidog这样做挺好,多个的话就需要自己设置。
      GatewayAddress和GatewayInterface一般按照默认就行,如果有需要自行设置。

      
             
      1
      2
      
             
      # GatewayID default
      # 这里很大一个坑,每个去掉注释的设置项一定要顶头开始,不能有空格,当然设置项的子项是要有缩进的。
    2. AuthServer项配置,位置大概在80行。

      
             
      1
      2
      3
      4
      5
      6
      7
      
             
      AuthServer {
      Hostname 192.168.66.186
      HTTPPort 9408
      SSLAvailable no
      Path /
      MsgScriptPathFragment gw_message/?
      }

      每项配置的具体作用和可选值在前面的注释中有。

    3. wifidog防火墙配置,在FirewallRuleSet中加入如下规则,位置大概在245行。

      
             
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
             
      # 放行微信
      FirewallRule allow tcp to wifi.weixin.qq.com
      FirewallRule allow tcp to dns.weixin.qq.com
      FirewallRule allow tcp to short.weixin.qq.com
      FirewallRule allow tcp to long.weixin.qq.com
      FirewallRule allow tcp to szshort.weixin.qq.com
      FirewallRule allow tcp to mp.weixin.qq.com
      FirewallRule allow tcp to res.wx.qq.com
      FirewallRule allow tcp to wx.qlogo.cn
      FirewallRule allow tcp to minorshort.weixin.qq.com
      FirewallRule allow tcp to adfilter.imtt.qq.com
      FirewallRule allow tcp to log.tbs.qq.com
      # 放行Apple
      #FirewallRule allow tcp to apple.com
      #FirewallRule allow tcp to icloud.com

    最小化修改就是以上三个地方,其它配置项建议也要看看,如果有需要的时候知道改哪里。

    通过 wifidog -h 命令查看用法,一般在开发的时候使用 wifidog -f -d 7即可。

    认证服务器

    认证服务器就是处理wifidog的五种协议,如果只是简单的认证,用php、python或者其他的脚本语言会更容易实现。因为我需要别的一些处理,所以我选择JAVA来处理。

    代码的话不准备在这里写了,放在Github,不过现在代码写的太烂,完成度太低,还没有push,先放链接 fliapingWifi-auth

    参考文章


    展开全文
  • 前言 大家如果有用公共场合wifi的习惯,想必都有过如下的体验。 ...这就是利用微信身份来进行wifi连接认证,主要目的是商家为了吸引...在进行改造之前请务必要看微信公众平台开发文档的微信连wifi,后面提到的相关设

    前言

    大家如果有用公共场合wifi的习惯,想必都有过如下的体验。


    这就是利用微信身份来进行wifi连接认证,主要目的是商家为了吸引顾客,推广其公众号。别的也不多说,下面就来讲一讲怎么实现这样的wifi认证方式。

    本篇文章要讲的是portal型路由设备(具体就是OpenWrt路由)的改造实现。在进行改造之前请务必要看微信公众平台开发文档的微信连wifi,后面提到的相关设涉及微信公众平台开发的相关术语、参数不再一一解释。


    Wifidog的原理

    下图是在Wifidog的wiki网站上截取的wifidog认证流程图,网址为点击打开链接

    wifidog由两部分组成,一个是运行在路由器上的程序,另一部分是运行在认证服务器上的程序。

    wifidog的认证流程大致是:

    1.首先,用户的终端可以连接上wifi,然后发起访问网站的请求,如www.baidu.com;

    2.网关根据防火墙规则,将用户的请求重定向到本地端口(wifidog的监听端口);

    3.网关将用户的访问重定向到认证服务器上的认证页面;

    4.认证服务器返回登录页面至用户;

    5.用户再向认证服务器提供凭据,如用户名和密码;

    6.认证服务器根据用户提供的凭据来确定用户是否符合要求,是否可以上网;

    7.如果符合要求,认证服务器将用户的访问重定向至路由器的网关并携带标识token;

    8.网关向认证服务器确认用户信息;

    9.如果符合要求,服务器向用户返回登录成功页面;

    10.用户就可以上网了。

    WifiDog在openwrt上的安装和配置

    我的路由器型号是:TP-LINK的TL-941N V4/V5版。

    安装的openwrt是:openwrt-ar71xx-generic-tl-wr941nd-v4-squashfs-sysupgrade(先刷openwrt-ar71xx-generic-tl-wr941nd-v4-squashfs-factory)。

    我是先装了luci,然后查到了这个路由器的wifidog版本的下载地址,然后通过opkg install安装的(由于这款路由器的FLASH只有4M,装了luci以后就不能装wifidog了,所以又刷了一次系统,只安装了wifidog,然后通过windows下的putty这个ssh工具来访问openwrt路由器。)。

    首次访问路由时,可通过telnet工具,然后通过passwd,设置路由器的密码,之后就可通过ssh访问了。

    Wifidog的配置如下所示:

    [plain]  view plain  copy
    1. GatewayID default  
    2. GatewayInterface br-lan  
    3. GatewayAddress 192.168.1.1  
    4. ExternalInterface br-lan  
    5. AuthServer{  
    6. Hostname justyoung.com(也可以是域名)  
    7. SSLAvailable no  
    8. HTTPPort 8080(默认是80)  
    9. Path /wifidog/(文件名的两边都要加‘/’号,除非是根目录,只要一个‘/’)  
    10. LoginScriptPathFragment login.php/? (这里把第一次登陆时重定向的位置也修改了,加了一个后缀,默认是login/?,)<pre class="plain" name="code">   PingScriptPathFragment ping.php/?  
    11. PortalScriptPathFragment portal.html?  
    12. AuthScriptPathFragment auth.php/?  
    13. ...  
    14. 可以有多个AuthServer,Wifidog会从第一个往后找,直到找到可用的认证服务器为止。  

    这段代码首先根据mac地址来判断登录用户是否合法,如果合法则直接重定向至192.168.1.1:2060/wifidog/auth?token=XXX,如果是不合法,则重定向至欢迎页面,引导用户获得认证。

    Wifidog与AuthServer的交互

    这里特别提一下,我发现在openwrt的download网站里,ar71xx有两个版本的wifidog,所以请根据需要确定好opkg的源,一个是2009版的wifidog,一个是2013版本的wifidog,我用的源是http://downloads.openwrt.org/snapshots/trunk/ar71xx.nand/packages/packages/,这个源的wifidog版本是wifidog_20130917-440445db60b0c3aff528ea703a828b0567293387_ar71xx,它们在login处有一个区别,后面会提。

    先介绍一下wifidog与Auth服务器的交互协议:

    1.首先是重定向,在首次登陆时,用户访问的url会被重定向到如下的地址:

    login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s(2009版本的wifidog)

    login/?gw_address=%s&gw_port=%d&gw_id=%s&mac=%s&url=%s(2013版本的wifidog)

    这里有一个版本的问题,即2009的wifidog在重定向时不会在链接中带上mac参数,而2013版本的wifidog是会带上的,所以这里需要根据自己的应用特别注意。在用户首次连接路由上网时,它访问的url会被定向到login页面,并带上如上所述的参数,我们可以利用这些参数做生成token或其它一些判断等。而通常情况是在login中向用户返回通过wifi认证的方法,如带有用户名和密码的登录页面等。

    2.用户认证协议:

    auth_server:/auth/auth.php?stage=%s&ip=%s&mac=%s&token=%s&incoming=%s&outgoing=%s

    一般情况下,认证服务器auth_server会根据用户输入的信息生成一个token,然后将用户重定向到wifidog的监听端口上,这个端口的默认地址为:192.168.1.1:2060/wifidog/auth?token=%s,wifidog得到这个token后,将其发送到auth_server认证服务器上进行认证。如果认证通过,auth_server返回“Auth: 1”,认证未通过则返回“Auth: 0”。具体参数如下。

    0 - AUTH_DENIED - User firewall users are deleted and the user removed.6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted1 - AUTH_ALLOWED - User was valid, add firewall rules if not present5 - AUTH_VALIDATION - Permit user access to email to get validation email under default rules-1 - AUTH_ERROR - An error occurred during the validation process

    认证服务器通过获取以上链接的参数可以判断这个用户是否合法等。这个链接是认证服务器用来判断首次登陆的用户是否合法和正在连接的用户是否可以继续访问链接的方法。每隔一段时间,wifidog会向认证服务器发送信息,即通过如上所示的链接发送信息,通过这些参数,可以看到某个客户的上传流量、下载流量、mac地址、ip地址、token和、ip和stage。stage可能是两个参数,分别是counters或login。第一次登陆验证时,stage=login,其它时候stage=counters。

    3.Ping协议

    http://auth_sever/ping/?gw_id=%s&sys_uptime=%lu&sys_memfree=%u&sys_load=%.2f&wifidog_uptime=%lu

    wifidog会向认证服务器发送一些信息,来报告wifidog现在的情况,这些信息是通过Http协议发送的,如上的链接所示,参数大概如字面意思,没仔细研究过,而作为认证服务器,auth_server应回应一个“Pong”。

    4.认证成功后的跳转

    portal/?gw_id=%s

    在认证成功后,wifidog会将用户重定向至该页面。

    5.若验证失败,则会根据失败原因跳转至如下页面

    gw_message.php?message=denied

    gw_message.php?message=activate

    gw_message.php?message=failed_validation

    注意一下,按照我对wifidog.conf的配置,在执行login时,相当于重定向至链接http://justyoung.com/wifidog/login.php?gw_id=XX....等等,其它执行的链接也是如此。

    编写自己的WifiDog认证服务器

    这次我使用的是php来编写auth_server服务器,因为这样比较简单。

    1.首先是login.php

    [php]  view plain  copy
    1. <?php  
    2. include './tool/MySQLHelper.php';  
    3. if (!empty($_GET["mac"])){  
    4.     $result = selectMacByToken($_GET["mac"]);  
    5.     if (!empty($result)){  
    6.         header("location: http://192.168.1.1:2060/wifidog/auth?token=".$result);  
    7.     }  
    8.     else {  
    9.         header("location: http://xxxxx/WelcomePage.php?mac=".$_GET["mac"]);  
    10.     }  
    11. }  
    12. else {  
    13.     header("location: http://xxxxx/WelcomePage.php?mac=".$_GET["mac"]);  
    14. }  
    15. ?>  

    2.ping.php

    [php]  view plain  copy
    1. <?php  
    2. echo "Pong";  
    3. ?>  

    这里没有做额外的处理,只是简单地向wifidog回应一个Pong。

    3.auth.php

    [php]  view plain  copy
    1. <?php  
    2. // 后门  
    3. if ($_GET["token"] == "123"){  
    4.     echo "Auth: 1";  
    5.     return;  
    6. }  
    7.   
    8. if (!empty($_GET["token"]) && isset($_GET["token"])){  
    9.     //获取$result的过程//  
    10.     isValidate($result);  
    11.     //**后续处理**//  
    12.     return;  
    13. }  
    14. else if((!empty ($_GET["mac"])) && isset($_GET["mac"])){  
    15.     //**获取result*//  
    16.     $result = isSubscribeByMac($_GET["mac"]);  
    17.     isValidate($result);  
    18.     return;  
    19. }  
    20. else  
    21. {  
    22.     echo "Auth: 0";  
    23. }  
    24.   
    25. // 输出是否合法.  
    26. function isValidate($result){  
    27.     if ($result == 1){  
    28.         echo "Auth: 1";  
    29.     }  
    30.     else {  
    31.         echo "Auth: 0";  
    32.     }  
    33. }  
    34. ?>  

    这里根据一些参数来获取$result,从而决定是否允许认证。

    4.welcomePage.php以及Portal.html就不一一列举了。


    微信wifi认证用户操作流程

    简单的讲(无技术实现),通过微信连wifi的流程(手机端):

    1. 用户连上无密码的热点,请求一个链接
    2. 路由器返回个用户一个portal页面。
    3. 用户在portal页点击微信连WiFi按钮,唤起手机微信。
    4. 微信显示提供热点的公众号,用户点击立即连接后向开发者的认证服务器进行认证。
    5. 认证通过,微信提示连接成功并转跳公众号预设的主页。

    对于用户而言,前面是TA要走的流程,对于开发者而言,要搞清楚每一步路由器、微信、认证服务器这三者到底做了什么,之间有什么关系。要想清楚这些,首先需要了解wifidog。

    wifidog认证处理流程

    wifidog的介绍就省略掉,相信看这篇文章的人都知道,直接进入正题。wifidog的认证有五种向认证服务器发送的协议,一种自己接受协议,虽说是协议,不过是不同的URL罢了。
    例如:192.168.1.2:9408/login/?mac=xx&gw_id=**

    协议 默认路径 作用
    Login login/? 用于登录时
    Auth auth/? 用于初次认证和心跳认证
    Ping ping/? 用于路由器心跳
    Portal portal/? 登录成功跳转
    Msg gw_message.php? 用于出错时用于展示给用户信息

    PS:官方画的这个图真的好奇葩,委屈下看官的脖子。或者可以转动屏幕,最好发到手机上看。

    下面对这个流程图做个解释:

    1. 客户端发送一个请求,请求被转发到认证服务器(AuthServer)的Login协议的URL上。这个过程中,具体情况是当客户端向路由器发送一个HTTP时,OpenWrt中的iptables预定义的规则(在wifidog启动时写入规则)将所有请求转发到wifidog监听的地址(默认端口是2060)。当然配置文件中可以设置白名单,保证白名单列表的正常连接。再接着wifidog将向客户端返回302重定向,location的url如下,客户端将请求这个地址。

              
      1
      2
      3
      4
      5
              
      http://auth_server/login/?
      gw_id=[GatewaylD, default: "default]&
      gw_address=[GatewayAddress, internal IP of router]&
      gw_port=[GatewayPort, port that wifidog Gateway is listening on]&
      ur1=[user requested url]

      在配置文件中如果不设GatewayID,wifidog会将GatewayInterface的mac地址去掉冒号当做GatewayID。

      If none is supplied, the mac address of the GatewayInterface interface will be used,without the : separators

      如图前面流程图所示,每个参数都给出了解释,很清楚。当然url是没有换行的。

    2. 服务器收到login请求后,返回一个登录页面,用户提交表单(假如有的话)。

    3. 服务器处理表单,保存表单信息,生成一个token。向客户端返回302重定向,重定向的location是http://GatewayIP:GatewayPort/wifidog/auth?token=token,然后客户端向wifidog请求这个url。
    4. wifidog收到请求后取得token,并向AuthServer发送Auth请求,url如下所示,之后认证服务器取得参数并判断是否认证通过。

              
      1
      2
      3
      4
      5
      6
      7
              
      http://auth_server/auth/?
      stage=[login|counters]&
      ip=[client ip]&
      mac=[client mac]&
      token=[token]&
      incoming=[in data usage]&
      outgoing=[out data usage]
      • stage有两个值login表示登录认证,counters表示计数(心跳)认证。
      • incoming和outgoing是从连接开始到当前的总量,不是每次auth的值。

        AuthServer返回是否认证成功时,若成功,返回Auth: 1,若不成功,返回Auth: 0

    5. 若认证成功,wifidog会重定向客户端到portal页,url如:http://auth_server/portal/?gw_id=%s
    6. Ping协议:在每次wifidog启动的时候都会首先通过ping协议判断某认证服务器(可以有多个)是否在线,如果是Down状态就会尝试下一个。url如下:

              
      1
      2
      3
      4
      5
      6
              
      http://auth_sever/ping/?
      gw_id=%s&
      sys_uptime=%lu&
      sys_memfree=%u&
      sys_load=%.2f&
      wifidog_uptime=%lu
    7. 若验证失败,则会根据失败原因跳转至如下页面

              
      1
              
      gw_message.php?message=[denied|activate|failed_validation]

    加入微信认证的流程

    要想比较容易的理解这个流程,需要仔细阅读Wi-Fi硬件鉴权协议接口说明



    结合微信的认证流程图和前面wifidog的认证流程,我们应该会有一些如何结合两者的想法。

    1. 手机选择SSID,无密码,连接。
    2. 手机系统尝试打开一个URL来确定网络可用(或者手动打开一个链接),路由的iptables转发请求到wifidog,wifidog将请求重定向到AuthServer,并加入参数。(参见Login协议)
    3. AuthServer返回微信portal页,页面中包含获得微信ticket的参数,包括appId,extend,timestamp,shopId,authUrl,mac,ssid,bssid,secretKey以及sign即对前面参数md5后的值。(参数后面再解释)
      注意此处有坑:
      • 此portal非wifidog认证中的portal,在结合微信的认证中wifidog的portal不会用到。
      • md5函数的结果中字母一定要是小写
    4. 点击portal页中的呼起微信连wifi按钮。
      • 首先portal页面中的js代码会向微信服务器发送Ajax请求,就是把要获取ticket的参数传过去。
      • 微信服务器验证参数和sign匹配,返回唤起微信所需要的ticket。
      • portal页面将通过微信的Schema:weixin://connectToFreeWifi/ticket=xx呼起微信。(有的浏览器不支持打开外部应用,最好用系统自带浏览器)
      • 微信连接微信服务器,核对ticket,成功则返回给微信用户的extend,openId,tid,然后微信会打开前置的连接wifi页(如图1中的连接前页)。
    5. 点击连接,向AuthServer发起请求认证,参数包括extend,openId,tid,AuthServer返回AC(Access Control)结果,如果通过要返回302重定向到wifidog的auth上,也就是wifidog认证流程中的第3步,重定向的location为http://GatewayIP:GatewayPort/wifidog/auth?token=token
    6. 微信请求重定向的链接,wifidog收到请求并取得token,发起向AuthServer的认证。若认证成功,微信显示连接成功页面。不成功则连接失败。
    7. 在连接成功页面点击完成转跳到公众号预设的home页。连接成功也也可以关注公众号。

    对于关注公众号可以联网,取消关注断网:

    • 可以让用户提前关注公众号,在第5步时判断是否有粉丝关系,有即通过否则拒绝。这可以做到关注了公众号可以联网。
    • 要想做到取消关注即断网需要在认证成功之后的auth心跳时进行判断,具体怎么判断是否取消关注,是每次查询微信接口还是用户取消关注微信服务器会给你个回调,这个我还没研究。

    关于实现的简单说明

    把认证流程搞清楚之后,有开发能力的人基本就不用往下看了,本文也是针对于有一定开发能力的人,关于实现不会像教程一样详细,主要是提几个关键点。

    wifidog客户端

    安装wifidog

    首先在OpenWrt中安装wifidog,如果是开发用的话安装repository中的就可以了。如果是用于生产的话需要对wifidog进行一些修改然后编译成自己需要的包,这里可以参考 WiFiDog 多线程优化思路

          
    1
    2
          
    opkg update
    opkg install wifidog

    开机自启 /etc/init.d/wifidog enable
    启动服务 /etc/init.d/wifidog start

    配置文件修改

    wifidog默认配置文件在/etc/wifidog.conf,最好是要通读整个配置文件,也不是很多。

    1. 修改GatewayID,位置大概在15行
      GatewayID用来表示这个wifidog网关的,前面也提到过,注释掉着一行的话wifidog会取GatewayInterface的mac地址去掉冒号(separators)作为网关ID,如果一个路由上只运行一个wifidog这样做挺好,多个的话就需要自己设置。
      GatewayAddress和GatewayInterface一般按照默认就行,如果有需要自行设置。

              
      1
      2
              
      # GatewayID default
      # 这里很大一个坑,每个去掉注释的设置项一定要顶头开始,不能有空格,当然设置项的子项是要有缩进的。
    2. AuthServer项配置,位置大概在80行。

              
      1
      2
      3
      4
      5
      6
      7
              
      AuthServer {
      Hostname 192.168.66.186
      HTTPPort 9408
      SSLAvailable no
      Path /
      MsgScriptPathFragment gw_message/?
      }

      每项配置的具体作用和可选值在前面的注释中有。

    3. wifidog防火墙配置,在FirewallRuleSet中加入如下规则,位置大概在245行。

              
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
              
      # 放行微信
      FirewallRule allow tcp to wifi.weixin.qq.com
      FirewallRule allow tcp to dns.weixin.qq.com
      FirewallRule allow tcp to short.weixin.qq.com
      FirewallRule allow tcp to long.weixin.qq.com
      FirewallRule allow tcp to szshort.weixin.qq.com
      FirewallRule allow tcp to mp.weixin.qq.com
      FirewallRule allow tcp to res.wx.qq.com
      FirewallRule allow tcp to wx.qlogo.cn
      FirewallRule allow tcp to minorshort.weixin.qq.com
      FirewallRule allow tcp to adfilter.imtt.qq.com
      FirewallRule allow tcp to log.tbs.qq.com
      # 放行Apple
      #FirewallRule allow tcp to apple.com
      #FirewallRule allow tcp to icloud.com

    最小化修改就是以上三个地方,其它配置项建议也要看看,如果有需要的时候知道改哪里。

    通过 wifidog -h 命令查看用法,一般在开发的时候使用 wifidog -f -d 7即可。

    认证服务器

    认证服务器就是处理wifidog的五种协议,如果只是简单的认证,用php、python或者其他的脚本语言会更容易实现。因为我需要别的一些处理,所以我选择JAVA来处理。

    代码的话不准备在这里写了,放在Github,不过现在代码写的太烂,完成度太低,还没有push,先放链接 fliapingWifi-auth

    参考文章

    展开全文
  • 本帖最后由 liudf 于 2018-11-21 16:02 编辑20181121 更新继 apfree wifidog 替换 libhttpd 库为 libevent 库后,apfree wifidog 再次发版本。本次版本的主要改动是扩展了原来的 wifidog REQUEST_TYPE_COUNTERS(简称...

    本帖最后由 liudf 于 2018-11-21 16:02 编辑

    20181121 更新

    继 apfree wifidog 替换 libhttpd 库为 libevent 库后,apfree wifidog 再次发版本。

    本次版本的主要改动是扩展了原来的 wifidog REQUEST_TYPE_COUNTERS(简称V1)接口为REQUEST_TYPE_COUNTERS_V2(简称V2),v2 跟以前的接口相比,将原来的逐个提交 client 信息并逐个处理的方式修改为一次性提交所有client的信息并返回结果一次性处理,跟 v1比,大大提高了效率和节省了资源,是 apfree wifidog 在支持大用户量认证的方向迈出的重要一步。认证服务器方面,WWAS同步支持了该接口。

    除了新接口的扩展外,apfree wifidog 还修改了一些小的 bug。

    wifidog做为一个轻量级的基于网关设备的广告营销解决方案,一直以来都在业界有着广泛的使用。但由于缺乏有效的投入,原版开源的wifidog在稳定性和性能上一直被诟病。开源apfree wifidog的发布,在稳定性和性能上比较好的解决了这些问题,因此,自从apfree wifidog开源后,其被广泛使用并借鉴(尤其是其推出支持https劫持跳转功能后)。

    但一直以来,无论是原版开源wifidog,还是开源apfree wifidog,都非常缺乏一个运营级别的认证管理平台,wwas的发布,在一定程度上解决了这个问题。与原版开源wifidog提供的认证管理平台不一样,wwas并未采用全宇宙最好的语言--PHP开发,而是采用了nodejs来开发,考虑到目前JavaScript语言在开源界的流行程度,相信这是一个非常明智的决定。

    在支持的认证方式上,wwas也与老的认证平台不同,wwas优先支持的是微信连认证及wfc支付上网认证的方式(下个版本会支持短信认证上网),这些都是顺应潮流及适应国内环境的做法:支持微信连,能将wifi设备转换成微信吸粉利器;支持wfc支付上网,能将wifi设备变成一款真正区块链“矿机”(通过给用户提供上网服务赚取wfc)。

    纸上得来终觉浅,说了这么多,其实不如实际操作一下,wwas为大家提供了免费接入的平台,只要你的路由器支持wifidog协议(当然最好是安装了apfree wifidog),就可以接入我们提供的免费平台(http://wifidog.kunteng.org.cn:8001),接入配置可以参考开源项目中的配置。

    wwas目前是第一次发布版本,当前提供的功能主要有:完全支持apfree wifidog并兼容原版wifidog的认证服务端功能。

    支持WFC和微信支付。

    支持渠道权限划分。

    支持微信wifi连的设置修改。

    支持WFC支付的设置修改。

    支持认证设备的状态查看。

    apfree wifidog 开源地址:

    wwas开源地址:

    wwas-admin开源地址:

    补充说明: apfree wifidog wwas wwas-admin都采用最新的GPLV3开源协议PS: 有兴趣的同学加群 331230369(收费红包群)424031785(区块链技术群),申请加入apfree wifidog开源项目,加群口令: apfree_wifidog

    展开全文
  • wifidog-java-portal

    2021-02-12 19:35:14
    wifidog-java-portal背景在一些公共场所(比如公交车、地跌、机场等)连接当地的 WiFi 时会弹出一个验证表单,输入验证信息(比如短信验证码)后就能够通过该 WiFi 联网。WiFiDogWiFiDog 是一套开源的无线热点认证管理...
  • wifidog首页重定向 首页重定向 修改http.c 、http.h 和gateway.c文件 http.h文件添加void http_callback_404_2(httpd*webserver, request *r);函数声明。 http.c 文件中添加函数: void http_callback_404_2...
  • wifidog-java-portal背景在一些公共场所(比如公交车、地跌、机场等)连接当地的 WiFi 时会弹出一个验证表单,输入验证信息(比如短信验证码)后就能够通过该 WiFi 联网。WiFiDogWiFiDog 是一套开源的无线热点认证管理...
  • wifidog直接编译进openwrt

    千次阅读 2017-09-08 20:04:52
    方法一、openwrt 根目录make menuconfig 搜索 Captive portal/ 看下有没有wifidog选项,如果没有./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 还不行的话,在项目下终端:vim feeds.conf....
  • wifidog交叉编译

    2016-04-22 16:29:00
    交叉编译wifidog并在openwrt平台上执行的过程。主要是针对wifidog源代码被改动后。 不得不亲自进行交叉编译移植的时候,所碰到的一些问题。 (1)下载源代码 这个能够到wifidog官方下载。 (2)交叉编译环境 ...
  • 其实搭建认证环境都是基础,重要的是要对WiFidog的代码进行详细的研究,了解清楚wifidog与authpuppy之间进行了哪些数据交互,WiFidog的程序框架及iptables的建立及生效规则,这才是重点。WiFidog和之前nodogsplash的...
  • wifidog认证流程(图文版)

    万次阅读 2015-01-14 14:37:28
    学习使用wifidog一段时间了,觉得这玩意真的不错,虽然有些代码写的不够严谨,运行效率不够高,但是少量人数情况下实现portal是很好的方案。 下面是我摘自一个博客的内容和apfree写的文档中的一部分发上来的,...
  • OpenWRT-Wifidog之利用Luci认证

    千次阅读 2017-02-09 08:36:09
    OpenWRT下实现Portal认证(WEB认证) 介绍了OpenWRT环境下实现Wifidog认证的办法,文末我曾经写道“有的人可能还会问,能不能把这些脚本集成到路由器当中,我的回答是能,只要你的脚本的功能不多,问题应该不大,但是...
  • wwas 是apfree wifidog(兼容原版wifidog协议)的云端认证服务器及认证设备管理维护平台,其与wwas-admin一起配合使用,为用户提供完整的apfree wifidog认证解决方案。运行服务端gitclonehttps://github....
  • wifidog 移植到MIPS平台

    千次阅读 2014-09-01 09:36:27
    所以想使用交叉编译的方法将wifidog移植到该平台上。   下面写下步骤吧,不是很复杂,但是开始也破费周折。下载源码到 http://dev.wifidog.org  下载就可以了。 ./configure CC=/opt/toolchains/...
  • WiFiDog 与 AuthServer

    2016-08-04 09:15:00
    背景 在一些公共场所(比如公交车、地跌、机场等)连接...本文将介绍通过 OpenWrt WiFiDog 来实现这个认证过程,认证服务器(WiFiDog Captive Portal/AuthServer)由 Java 编写。 WiFiDog WiFiDog 是一套开源...
  • wifidog接口文档

    2016-04-11 11:24:43
    wifidog是搭建无线热点认证系统的解决方案之一,他比nocat更适合互联网营销思路。目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux iptables防火墙...
  • wifidog认证接口

    2016-04-05 15:40:48
    wifidog是搭建无线热点认证系统的解决方案之一,比nocat 更适合互联网营销思路。实现了路由器和认证服务器的数据交互,在路由器方是用C 语言代码,通过wifidog 程序和linux iptables防火墙实现接入用户的认证跳转和...
  • wifidog移植到mips平台

    2015-01-04 12:41:47
    使用的是一款Broadcom的芯片,...所以想使用交叉编译的方法将wifidog移植到该平台上。   下面写下步骤吧,不是很复杂,但是开始也破费周折。下载源码到http://dev.wifidog.org 下载就可以了。 ./configur
  • wifidog认证流程

    2016-11-03 14:11:50
    wifidog是搭建无线热点认证系统的解决方案之一,他比nocat更适合互联网营销思路。目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux iptables防火墙...
  • wifidog做为一个轻量级的基于网关设备的广告营销解决方案,一直以来都在业界有着广泛的使用。但由于缺乏有效的投入,原版开源的wifidog在稳定性和性能上一直被诟病。开源apfree wifidog的发布,在稳定性和性能上比较...
  • wifidog + openwrt相关文章

    千次阅读 2015-05-25 22:54:27
    1,http://www.wifidog.pro/ 2, OpenWRT下实现Portal认证(WEB认证) ... 3,wiki http://wiki.openwrt.org/doc/howto/wireless.hotspot.wifidog 4,OpenWRT使用wifidog实现强制认证的WIFI热点
  • wifidog接口文档(转)

    2014-06-24 20:34:00
    目录(?)[-] 网关心跳协议 请求信息 回复格式 例子 用户状态心跳协议 请求格式 注意 回复格式 ...目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 480
精华内容 192
关键字:

wifidog平台