WifiDog:A captive portal suite

What is it composed of ?

A: It is composed of 2 components:

  1. The client is a daemon process - this gets installed on every wireless router
  2. The auth server is a web application - this gets installed in a central location

    What do I need ?

    1. Basic proficiency in a GNU/Linux environment
    2. A GNU/Linux OS with netfilter compiled into the kernel
    3. The iptables package
    4. The GNU C compiler (gcc). Other compilers may work, but we have not tested and will not support them.
    5. The latest Wifidog tarball which can be obtained from SourceForge

    Pre-installation

    This is where a lot of people run into problems, so let's state this in bold:

    MAKE SURE EVERYTHING WORKS FIRST BEFORE INTRODUCING Wifidog INTO THE ENVIRONMENT

    That especially means:

    • The router must boot properly
    • The router must bring up the interfaces properly
    • The router must set up the routes properly
    • The router must connect to the internet properly
    • DNS settings must be set or obtained properly. DNS must work.
    • DHCP settings (client, server or both) must be set or obtained properly.
    • The ipt_mac.o kernel module must be loaded.
    • If using NAT, the router must setup NAT/masquerading rules with iptables properly
    • Clients on the desired (WIFI) network must be able to bind, associate, lease and connect the internet properly
    • All the above must happen automatically when the router starts or gets rebooted

    Do NOT proceed with installing Wifidog until you've satisfied the above. It will not work otherwise and you will waste lots of time.

    Installation

    Wifidog, like many open source projects, is distributed with standard autotools utilities to make installation easy. Unpack the tarball (from Sourceforge) or get the lastest source from SVN (see Download menu), then follow the standard:

    ./autogen.sh
    make
    make install

    If you do not install it with make install, then you will find the compiled wifidog gateway binary in src/wifidog (also don't forget to copy wifidog.conf to /etc).

    OpenWrt? ipkg

    More details can be found in the README.openwrt file.

    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

    If there were no errors, your package should be in ~/wifidog.openwrt/OpenWrt-SDK-Linux-i686-1/bin/packages

    Configuration

    Edit /etc/wifidog.conf and follow the instructions in the file. Things should be self-explanatory.

    Running Wifidog for the first time

    Run Wifidog with the following switches:

    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

    Testing

    As a client on the WiFi network (or whatever interface is configured as the LAN interface in /etc/wifidog.conf), open a web browser and try to browse to your favourite web site.

    Monitor the output of the running Wifidog to see what it's doing.
    aaarticlea/png;base64,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" alt="" />

WifiDog系统的更多相关文章

  1. 2012高校GIS论坛

    江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...

  2. 海蜘蛛WiFiDog固件 MTK7620 OEM,带云AC功能、探针、广告插入,MTK7620解包打包维修默认参数

    修改内容: 1.系统默认管理员员帐号密码 2.系统默认LAN 接口地址 3.系统默认DHCP及保留地址 4.系统默认云AC远程地址及协议内容 5.系统默认JS插入地址 6.系统默认探针位置 7.默认顶 ...

  3. 极路由1s,固件需要刷入RipOS系统的加40块

    极路由1s,固件需要刷入RipOS系统的加40块,集成wifidog功能,wifi广告路由器的理想选择功能. 经过测试,无线性能稳定,无线可带32个手机客户端. 具体配置: 7620CPU ,主频58 ...

  4. wifidog源码分析 - 认证服务器心跳检测线程

    引言 但wifidog启动时,会自动启动认证服务器心跳检测线程,此线程默认每隔60s与认证服务器交互一次,会将路由器的信息(系统启动时长,内存使用情况和系统平均负载)告知认证服务器,并通过一个&quo ...

  5. wifidog接口文档(转)

    目录(?)[-] 网关心跳协议 请求信息 回复格式 例子 用户状态心跳协议 请求格式 注意 回复格式 状态码 例子 跳转协议 请求格式 例子 注册协议 请求格式 例子 wifidog是搭建无线热点认证 ...

  6. Wifidog的协议梳理

    上篇文章结合wifidog的协议,讲解了如何实现wifi认证.这篇文章会详细讲解一下wifidog的协议. wifidog的认证流程图 用户连接WIFI会跳转到以下地址: 1 2 3 4 5 6 7 ...

  7. Wifidog初分析

    一.综述 wifidog是搭建无线热点认证系统的解决方案之一,他比nocat.nodog更适合互联网营销思路.常见的使用在openwrt系统上,它实现了路由器和认证服务器的数据交互,在路由器方(客户端 ...

  8. Wifidog及认证过程初分析

    Wifidog初分析 一.综述 wifidog是搭建无线热点认证系统的解决方案之一,他比nocat.nodog更适合互联网营销思路.常见的使用在openwrt系统上,它实现了路由器和认证服务器的数据交 ...

  9. wifidog用php实现验证流程

    原创性声明 此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/25384909假设进行转载请注明出处.本文作者原创,邮箱zhujunx ...

随机推荐

  1. java 读取mysql库表数据

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  2. php 实现购物车

    <?php class Cart{     public function Cart() {         if(!isset($_SESSION['cart'])){             ...

  3. 知方可补不足~CSS中的几个伪元素

    对于一个很好的编辑器VS来说,它对于编程语句的自动提示功能是很强大的,有时,我们根本不需要看相关API,而直接看VS给我们的提示就可以完成一个新技术的学习了. 今天我们来说几个CSS中的伪元素,它们在 ...

  4. Swift 新语言开发

    全书文件夹: 一.Welcome to Swift 二.Language Guide 三.Language Reference /* 译者的废话: 几个小时前熬夜看了WWDC,各种激动,今年非常有料啊 ...

  5. JavaScript 之 call apply bind

    关键字 this 绑定的方法 this的动态切换,固然为JavaScript创造了巨大的灵活性,但也使得编程变得困难和模糊.有时,需要把this固定下来,避免出现意想不到的情况.JavaScript提 ...

  6. Android AsyncTask学习

    Android程序有UI进程和后台进程,在执行一些耗时的操作时,如果在UI进程中,很可能出现假死的情况,用户体验会受到影响,因此,那些耗时进程往往就放在了后台进程中,用户体验能更好一些.网络情况不稳定 ...

  7. 卸载服务器自带httpd服务

    #rpm -e mod_ssl #rpm -e mod_python #rpm -e mod_perl #rpm -e webalizer   把所有的依赖包都卸载后   再次 #rpm -e htt ...

  8. linux install zh_CN(ubuntu)

    cd /usr/share/locales sudo ./install-language-pack zh_CN

  9. 空值排序(oracle/sqlserver)

    oracle认为 null 最大. 升序排列,默认情况下,null值排后面. 降序排序,默认情况下,null值排前面. 改变空值办法: (1)用nvl函数或decode函数将null转换为一特定值 替 ...

  10. 文件:一个任务 - 零基础入门学习Python029

    文件:一个任务 让编程改变世界 Change the world by program 一个任务 这节课,我们需要一起来完成一个任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起 ...