如何让无线路由器刷DD-WRT系统(含wifidog功能)

如何给路由器刷DD-WRT固件?
首先确定您的路由器是否支持DD-WRT,您可以在百度中搜索路由器型号+DD-WRT (如:D-link 615 DD-WRT)根据结果来判断是否支持刷固件。
您也可以在DD-WRT官方网站来查询
http://www.dd-wrt.com/site/support/router-database
在输入框中输入你的路由器型号 如: tp- 就会显示出tp-link 相关列表来
如果后边显示yes 就说明该路由器支持dd-wrt。

DD-WRT(简称DD)是一个Linux开源操作系统,实质它是第三方的路由器固件。路由和网管功能非常强大,通常我们使用的路由器设备,都具有一个独立的操作系统(英文简称OS),用于对路由器设备进行各种功能设置和管理。其实我们通常所说的升级路由器固件,也就是指升级刷新路由设备里面的操作系统,以使得路由器设备的功能更加强大。常见的第三方路由器固件还有番茄(Tomato)等。DD-WRT固件刷机流程如下。

一、为什么要刷DD-WRT?

DD-WRT固件可以实现中继、AP、VPN、VOIP、UPNP、DHCP、端口映射、DDNS、IPv6、SNMP、SSH、计费功能、封杀BT、VLAN划分、调整无线信号发射功率等扩展功能。

二、DD-WRT收费吗?

常规版本都不用收费,但也是特别版需要付费。付费版功能更加强大。如:PPPoE验证、ARP欺骗等。

三、哪些路由器可以刷DD-WRT固件

1、支持刷DD-WRT的路由器种类很多,可以参考官方的硬件支持列表。主要是Broadcom芯片方案的路由器,其他的的也有支持,但是并不是很多。

2、首先要了解自己的路由器是否支持DD-WRT、支持那种版本的DD-WRT。其次刷固件方式,如有特殊说明,一般都会有提示。如有一些路由器就提到只能使用TFTP方法刷,否则有可能不成功!

3、DD-WRT的MINI(迷你版)和STD(标准版)固件大小差不多,Flash(闪存)通常在4M或8M就可以刷标准版或增强版的固件。如果你FLASH(闪存)有8MB的话当然是刷MEGA(完整版)好。对于新手你可以先刷好MINI(迷你版)再升级到其他版本,STD(标准版)固件支持的功能要比MINI(迷你版)的多。

版本介绍:
Micro(最小版) 需要 2MB FLASH
Mini(迷你版) 需要 4MB FLASH
Standard(STD标准版) 需要 4MB FLASH
VOIP(VOIP功能版) 需要4MB FLASH
Mega(完整版) 需要 8MB FLAS

四、需要哪些设备或工具

刷路由器通常不需要特殊设备,电脑一台、网线一根、路由器一台即可。而且大部分路由器刷固件都可以在Web界面进行。

五、固件刷新方法种类

1、路由器自带的Web配置界面刷固件。

2、使用TFTP方法刷。

具体使用那种方法新,请参照DD-WRT硬件支持列表的方法。不过一旦升级到了DD-WRT,以后更新的时候可以通过Web界面进行。

六、采用Web方法刷

确认自己的路由器可否使用Web方式刷新,当然大部分路由器都可以这样做。Web方式刷新其实就是路由器设置菜单里面的“更新路由器固件”功能。虽然不是更新同厂的固件,但是也是可以用的,这种升级方式最为方便。

1、确认路由器支持DD、没有特别刷新方法的说明。本教程是以Linksys WRT150N V1 无线路由器为例。

2、下载适合路由器的固件版本。通常都会支持中文或其他网友发布的汉化。最好准备一份路由器的原厂固件,以备恢复时使用。
注意:如果想要下载最新版本,可以进入Feko目录下载,不过这个目录里的固件不是最终版,属于SVN(Subversion)。如果不是为了尝新或者路由器有兼容问题,建议还是不要这么做了。

3、登录Linksys的管理界面→固件升级,点击“浏览”找到下载的DD-WRT固件。这款路由器提供两种升级方式,一种是常规的“升级”,一种是“安全升级”(见下图)。
1.png

4、后者将进入Boot模式将新的固件加载到路由器上,优点是可以避免内存不足而造成的失败。

5、如果提示刷新失败,建议重启路由器再进行刷新。如果重启后还是失败,那么就得分析具体原因了,看看是不是版本不合适引起的。例如是不是固件太大了,超过路由器的容量等。

注意:下载的DD固件通常是bin为扩展名,如果路由器不支持这种格式升级,可以尝试修改扩展名为支持的类型;强烈建议大家使用有线连接路由器的方式刷新;刷新期间不要关闭路由器电源,一直要等刷新结束再进行操作。

七、采用TFTP方法刷

TFTP是Windows内置的一个命令。在命令提示符下进行操作。使用TFTP刷新请用网线把电脑和路由器的LAN口相连接。

1、确认路由器支持DD,且只能用TFTP的刷新方法。然后根据路由器型号、下载对应的DD固件版本。某些路由器刷DD使用TFTP有特别说明,一定要看仔细。

2、在开始菜单中选运行然后输入CMD并回车进入命令提示符。输入ipconfig /all了解当前的路由器的IP地址,一般默认都是192.168.1.1。建议手动分配一个地址。防止重启后IP发生变化。请设置电脑和路由器在同一个网段,例如192.168.1.2。然来将dd-wrt.bin固件文件放到C盘的根目录。
2.png

3、假设路由器IP是192.168.1.1,输入命令ping 192.168.1.1 -t并回车看通不通得了,通了就OK。然后重启路由器(通过Web界面)。

4、因为需要在启动的时候刷新,所以先输入tftp -i 192.168.1.1 put dd-wrt.bin,但是先不要敲下回车键。

5、重启路由器(有的路由器非要使用Reset按钮才能进入TFTP模式),按下回车。也有一种说法是看路由器指示灯,当所有指示灯一闪而灭的瞬间,按下回车输入命令。成功之后会出现successful的提示,如果失败就再来一次。出现successful之后,还需要你耐心等待几分钟,不要进行任何操作。

八、刷新失败怎么办?

先断开电源重启、按复位(Reset)键等操作看有没有变化。如果没有变化,试试看用TFTP法刷新。如果还不行,可以去买一条路由器相配套的JTAG线,通过它可以把路由器救活。淘宝有些卖家在质保期内也会提供免费救活服务。

PS: DD-WRT里不要盲目加大功率,毕竟信号太强会对身体有伤害。如果信号够用还可以适当降低标准信号功率,从而减少无线信号对人体的辐射。对有些路由器作用并不大,反而是增加无线干扰或导致无线网卡损坏导致经常断线和无信号,而且这种损害是不可逆的和不能修复的,坏了就成砖头,有可能导致路由报废。请大家切记!

本文章由 http://www.wifidog.pro/2014/12/19/DD-WRT-%E5%88%B7%E6%97%A0%E7%BA%BF%E8%B7%AF%E7%94%B1%E5%99%A8.html 整理编辑,转载请注明出处

wifidog 接口详解

概述
wifidog:是搭建无线热点认证系统的解决方案之一,他比nocat更适合互联网营销思路。目前支持openwrt系统,他实现了路由器和认证服务器的数据交互,在路由器方是用C语言代码,通过wifidog程序和linux iptables防火墙实现接入用户的认证跳转和控制,在认证服务器方是通过php实现用户的认证流程和管理。

优点:有开源代码,可以很方便的搭建认证系统。
缺点:通过iptables方式实现,性能比较差,整体拉低了路由器的数据包处理速度,协议比较繁琐,对认证服务器的造成性能损耗比较大,在安全方面都是明文传输,有一定的安全隐患。

认证流程
注意:
热点服务器地址为:auth_server
热点服务器路径为: /

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

用户状态心跳协议
请求格式:
http://auth_server/auth/? (因文明发贴将:换为&)
stage=
ip=
mac=
token=
incoming=
outgoing=

注意:
ip,mac,token为用户的基本信息,incoming/outgoing为用户的连接计数信息。
stage=counter|login|logout,分别表示:已认证,新认证用户,超时需要删除的用户。
回复格式:
Auth: 状态码 (注意 中间冒号和状态码之间有个空格)
状态码:
0 - AUTH_DENIED - User firewall users are deleted and the user removed.
1 - AUTH_ALLOWED - User was valid, add firewall rules if not present
例子:
GET /auth/?stage=counters&ip=7.0.0.107&mac=00:40:05:5F:44:43&token=4f473ae3ddc5c1c2165f7a0973c57a98&incoming=6031353&outgoing=827770 HTTP/1.0
User-Agent:cnrouter wifidog
Host: auth.cnrouter.com

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

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

本文章由 http://www.wifidog.pro/2014/12/19/wifidog-%E6%8E%A5%E5%8F%A3%E8%AF%A6%E8%A7%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://www.wifidog.pro/2014/12/18/wifidog-%E8%AE%A4%E8%AF%81.html 整理编辑,转载请注明出处

wifidog 稳定性测试

最近很多网友都说wifidog原版不是很稳定,那么怎么测试稳定性?
测试方法有两种:1是通过手机登陆网站;2是通过软件发送多个连接请求来达到测试wifidog处理请求的能力,也就是其稳定性。
测试环境:将刷好的带wifidog认证的路由接入Internet和测试机(电脑或者手机)。使用电脑连接到路由后台,以调试模式运行wifidog,以便随时监控wifidog。
测试条件:wifidog启动中并且测试机没有进行过认证。
预期结果:wifidog死掉或者重启。
方法一:通过多台手机登录网站发送连接请求(登录新浪视频和搜狐视频会不停地发送连接请求),查看后台监控wifidog异常,增加手机链接到测试路由并登陆网站直到wifidog死掉或者重启。
方法二:通过http_load软件发送网站连接请求,查看后台监控wifidog异常,逐渐增加发送连接请求次数直到wifidog死掉或者重启。

本文章由 http://www.wifidog.pro/2014/12/18/wifidog-%E7%A8%B3%E5%AE%9A%E6%80%A7.html 整理编辑,转载请注明出处