分类 wifidog原理 下的文章

wifidog 无线社区模式

使用强制网络门户运行无线社区

这个文件列出了使用强制网络门户进行互联网接入的不同模式(单独的社区可以实现多个模式)。目前主要是书面澄清术语。并不尝试去讨论每个模式是如何保持可持续性,或者在理论上每个模式可以执行的大部分的命令。这个文件还会列出wifidog是如何适应每个模式和缺失哪些特性。

决定谁可以访问的模式
用户参与的模式

开放社区
用户可以自由注册

封闭社区
为现有社区的用户提供通道时。例如:大学校园,公共图书馆用户等等。

交易模式
用户在访问热点网络时需要提供一些东西。典型的是宽带或者访问他们自己的热点。例如:Fon,wifree。

支付定金&WISP
当用户交纳月租的时可进行访问。住宅可以从WISP获取。

无用户模式

免费交易
这种模式中,为用户提供一次使用密码的机会,在商业场所相当于是免费交易。例如:NYC无线。

每日密码
在商业场所为用户提供密码,但每天都会变化,非电子分配(通常写在黑板上)。这个方法是强迫用户去此场所来获得访问权限。

付费
用信用卡购买一天或一小时访问权限。例如:最典型的商业热点运营商。

预付时间
就像预付费手机。

开放访问点
无访问控制或门户直接插入访问点。

Portal mechanics
模式的选择大部人决定portal mechanic。一个理想的门户系统有三个不同的“页面”包含在连接进程中。
  Welcome page(通常是登录页面,用户还不能进行网络访问)
  Disclaimer page(为获取访问必须接受,在欢迎页面和门户页面之间,必须每次都接受或只接受一次)
  Portal page(用户可以进行网络访问)

本文章由 http://www.wifidog.pro/2015/03/16/wifidog-%E6%97%A0%E7%BA%BF%E7%A4%BE%E5%8C%BA%E6%A8%A1%E5%BC%8F.html整理编辑,转载请注明出处

wifidog配置网关注意事项

用户超时
跟其它解决方法不同,Wifidog无需一直打开认证页面用脚本来保持连接。网关只会在数秒中没有获得任何来自客户端的流量时,才判断为超时断开连接。确保客户端没有因为闲置而超时,网关将会在每个时间间隔来重新ping每个客户端来检测流量。遗憾的是,有些所谓防火墙设置很讨厌,防ping,造成检测时完全丢包被误判为离线。这也是经常超时的原因。

Wifidog网关网站界面
网关只有最小化的网站界面,为用户提供了很少的信息。这样就不会与门户相混淆,门户必须由认证服务器进行管理。以下信息可以直接从网关得到:

http://gateway_ip:gateway_port/wifidog/

  • 网关版本
  • 节点ID

http://gateway_ip:gateway_port/wifidog/status

  • 网关版本
  • 网关正常运行时间
  • 网关是否具有网络连通性
  • 是否与认证服务器相连接
  • 获得此服务的用户编码
  • 已连接的用户编码
  • 用户列表
      IP
      MAC
      Token
      下载字节
      上传字节
  • 目前使用的认证服务器

http://gateway_ip:gateway_port/wifidog/about

OLSR和Wifidog网关
问题:如果你选择只安装一个Wifidog网关服务器,那么所有用户的MAC地址都将被最近的OLSR路由器所“掩饰”。
解决办法:
在OLSR节点安装Wifidog。允许HTTP在OLSR节点间流动,可以通过用Cron在所有节点启用以下脚本来实现。

ipkg install ip
#!/bin/sh
#
# Script to bypass HTTP interception for traffic forwarded by OLSR
# bms 9-Aug-2005
# Licensed under GPL
#

rm -f /tmp/get_neighbors.awk
cat > /tmp/get_neighbors.awk <<__HERE1__
BEGIN {
 while("route -n"|getline) {
    if (/^[0-9]/) {
        if (0 < \$5) {
           if (\$3 == "255.255.255.255 <http://255.255.255.255>") {
             printf "%s\n", \$1;
                 }
               }
             }
           }
        }
__HERE1__

iptables -t nat -D WiFiDog_Unknown -j OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -F OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -X OlsrNeighbors 2>&1 >/dev/null
iptables -t nat -N OlsrNeighbors

neighbors=$(awk -f /tmp/get_neighbors.awk)

for _neighbor in ${neighbors} ; do

   _mac=$(grep "^${_neighbor}" /proc/net/arp | awk '{print $4}')
   echo ${_mac}
   iptables -t nat -A OlsrNeighbors -m mac --mac-source ${_mac} \
          -p tcp --dport 80 -j ACCEPT

done

iptables -t nat -I WiFiDog_Unknown -j OlsrNeighbors

本文章由 http://www.wifidog.pro/2015/03/13/wifidog%E9%85%8D%E7%BD%AE%E7%BD%91%E5%85%B3%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.html整理编辑,转载请注明出处

wifidog 认证服务器如何授权和使用用户配置文件

创建配置文件
1.创建必要的内容类型过滤器
这些数据类型在配置文件中可能会用到。
每个内容类型过滤器的格式是标准陈列:在内容类型执行的一组函数。格式是array(array(callback_funct, array(callback_funct_parameters))
注意的是callback_funct表示对象已被验证,所以它没有静态的classname。
例如:获取文档子类别的Simple内容类型,陈列应为

array(array('isSimpleContent'), array('isContentType',array(array('File'))) ); 

注意的是第二个callback:isContentType,用了单参数。当$criteria_array指定callback参数为列表,将“File”传到“isContentType”应该写成array(array('File'))。
你也许至少需要以下过滤器:

**Avatars**
array ( 
  array ( 
    'isContentType', array ( 
      array ( 
       'Avatar', 
      ), 
    ), 
  ), 
) 

**Hyperlink only**
array ( 
  array ( 
    'isExactContentType', array ( 
      array ( 
        'HyperLink', 
      ), 
    ), 
  ), 
) 

**SimpleLangstring only**
array ( 
  array ( 
    'isExactContentType', array ( 
      array ( 
        'TrivialLangstring', 
      ), 
    ), 
  ), 
) 

**SimplePictures** 
array ( 
  array ( 
    'isContentType', array ( 
      array ( 
        'SimplePicture', 
      ), 
    ), 
  ), 
) 

**SimpleString only**
array ( 
  array ( 
    'isExactContentType', array ( 
      array ( 
        'SimpleString', 
      ), 
    ), 
  ), 
) 

2 创建配置文件模版
包括配置文件的字段列表,当用户进行编辑,其它用户浏览时可见的选项标签。
3 将配置文件模版与网络进行关联
4 编辑你自己的配置文件进行测试

数据模型
Network_has_profile_templates
  - Network_id:每个profile_field只有一个网络
  - Profile_template_id:配置文件模版id
  - Is_invisible boolean:用户是否希望用匿名模式

Profile_templates
  - Profile_template_id guuid:配置文件id
  - Creation_date timestamp

Profile_template_fields
基本上是用户可以进行填充的数据字段列表。被管理员用来指定用户配置文件中可得的字段。
   - Display_label content_id:配置文件显示界面的字段标签。Content id必须可本地化,最好是个图片。
   - Admin_label content_id:用户编辑界面的字段标签。
   - Content_filter filter_id:用来列出指定内容类型的过滤器。这些内容类型允许被此配置文件字段的用户当作函数来进行记录。
   - UI代码应该保存在ContentTypeFilter类别当中。
   - Order:配置文件中字段显示的顺序
   - Semantic_id text:用户不可见。这字段有两个作用:
     1.最终用于允许输出配置文件的微格式和XML算法。
     2.一些semantic_id函数对于wifidog是有特殊意义的。例如配置文件中存在foaf:img的元素,它将用来在在线用户列表中显示用户的自定义头像。用来指定网络配置文件字段的管理界面必须列出所有对wifidog有特殊意义的semantic_id函数。

User_has_profiles
用配置文件连接用户表格
   - User_id:用户id
   - Profile_id:配置文件id
   - Is_invisible Boolean:用户是否希望用匿名模式

Profiles
从技术上讲,我们应该直接在user_profile_fields连接用户表格,但这不可取。配置文件和user_has_profiles tables被替换的原因是:
 1.允许在用户创建自己的配置文件前添加用户协议。
 2.允许更便捷的保存非数据元素,例如可视模式,是否其它用户可以发送用户短信息等等。
 3.如果用户需要,允许每个网络都有一个配置文件。
  - Profile_id guuid:配置文件id
  - Creation_date timestamp

Profile_fields
由终端用户输入的配置文件函数。
  - Content_id:当前连接的数据
  - Last_modified timestamp:起初不会被应用,因为它要求每个内容类型要有调节器和processAdminUI并反馈数据是否被正确修改。这实际上并不困难并且如果我们想衡量用户如何使用和更新他们的配置文件的话,这点都是最基本的。

ContentTypeFilter
ContentTypeFilter已存在并且应用在内容管理器的一些部分。基本上它会在每个备用ContentType以静态的方式用自己的参数启用函数引用。一些Content类的函数也是因为这个被指定的。当它非常灵活的运转时,从代码指定过滤器是唯一的方法。我们需要UI和数据表示法,这会很困难但并非不可能。困难点有:
  - 列举可得的滤函数
  - 解决已存在的过滤器由于代码中的滤函数丢失导致失效,从过滤器永久删除字段。
  - 在callback函数参数输入的界面,它以能够让PHP在不使用eval()的情况下

本文章由 http://www.wifidog.pro/2015/03/13/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html 整理编辑,转载请注明出处

Wifidog门户自定义

简介

  • 自定义静态内容被作为内容类型添加到数据库。他们会显示在结构化区域。
  • 在HTML里无布局
  • Logo和界面布局以CSS形式添加

自定义界面
添加自定义内容
所有自定义内容都应该通过内容管理器显示在数据库中,通常使用TrivialLangstring和Langstring类型。查看

  • ContentDistributionSystem
  • doc/auth-server/ContentManagerTutorial

自定义内容和界面元素的逻辑定位
注:下文提到的是系统目前使用的构架布局,但HTML和CSS重构还没有完成。
我们正在从HTML中将同样的布局导向代码移出,所以在CSS中可做的事还是要在CSS中完成。每个页面的结构标识和内容元素都将始终如一的向CSS提供更多的关联信息,并且让样式表更易编写修改。

当内容从网络接口分配出来时,就会具有三个属性:
1.Page:登录页面,门户或其它(其它是指除了登录页面和门户外,还有管理界面和其它页面)
2.Area:图表中灰色分区的ID
3.Display order:在一个区域内的内容显示顺序

更改布局
Stylesheets在wifidog可以做以下应用:
1.默认wifidog stylesheet(默认主题)
2.网络指定的由网络参数选择的stylesheet(网络主题公园)
3.Stylesheet内容类型被添加在内容管理器

使用CSS主题管理器进行样式化
所有网络主题公园都保存在自己的文件夹内,允许分享和用stylesheet来引用图形元素。
使用网络主题公园的优势在于:

  • 易于添加图像
  • 能够在SVN版本化
  • 在服务器上的负载极小
    网络主题公园最多的用于创建网络的大致外观和感觉。你也可以在这更换wifidog logo等。

使用Stylesheet内容类型样式化
使用内容管理器可以添加一个或多个stylesheet snipplets。
使用Stylesheet内容类型的优势在于:
能够被添加到一组热点或者单块内容
能够从网站界面进行编辑
Stylesheet内容类型大多用于暂时更改和定位专一样式化。

自定义UI
内容服务器的静态UI元素
一些重要的界面元素(例如:在线用户列表)已经被重新写成静态内容类型,所以每组可以逐个配置并决定在哪里显示。你可以向空白的门户添加人认为合适的元素。这些元素可以从内容管理器中获得。

动态Smarty模版
你可以使用Smarty语言直接在内容管理器上创建自定义UI元素,并可以从wifidog获得许多稳定的变量(热点名称,登录用户数量等)。当创建SmartyTemplate时可以看到获取完整列表的说明。

本地化
Static strings和gettext
所有static strings能够放在_()内,通过gettext来本地化。如果不支持你的语言,查看doc/developer/LanguageTranslation。
代码提示:

Good: $output=sprintf(('Welcome %s'), $username); Bad:
$output=
('Welcome').' '.$username; Very bad: $output=_("Welcome
$username");

内容管理器的文本内容
在Wifidog,所有安装语言都有相对应的文本内容版本。如果精确的语言没有文本的话,Wifidog会:
1.用同样语言显示文本(如:fr_FR或fr)
2.用国家子代码显示文本(如:en_CA)
3.用默认语言显示字符串
显示任何可得字符串

编辑静态模版
Wifidog的所有模版都旨在缓解开发,并不主要是做为自定义工具。它们可以随时更改并且可以在不得已时进行编辑。没有任何机制来要求模版必须用在哪里,而不认可默认设置。将来也不可能有这种机制。
不到万不得已不要编辑模版!这对你没有帮助并且可能会影响项目。如果你想进行一些操作,但又不知道如何进行,那选择下面一项:

  • 查询IRC邮件列表应该如何操作
  • 用不影响组群的方法修改模版,并提交修改补丁。通常会像创建HTML元素一样简单。
    如果你编辑了模版却没有提交修改,那么你就要负责根据基础模版的变更将它们进行更新。因此,我强烈建议从SVN启动成品服务器,而不是在tarball。这样SVN将会做一部分变更合并工作,并且有冲突提示。

与现有CMS整合
一些组群可能已经有定位感知CMS,他们想继续使用或不想提供任何定位专一内容。鉴于整合水平,已存在系统或网页可以选择一种或两种方法进行整合:
1.使用IFrame内容类型,它会使一个网页作为Wifidog门户的一部显示出来
2.使用SmartyWifidog内容类型,当往目标传递一个些wifidog变量时,可以使一个网页作为wifidog门户的一部分显示出来。
3.使用“URLto show instead of the portal”来完成关闭此热点的Wifidog门户,并且显示一个自定义URL。

与现有认证系统整合
通过扩展认证器的级别,Wifidog已经支持一些外部认证系统。不久,认证器确认了登录界面,创建新用户界面和用户管理部分以后,这个概念就会更加丰富。

本文章由 http://www.wifidog.pro/2015/03/12/wifidog%E9%97%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89.html 整理编辑,转载请注明出处