免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7475 | 回复: 5
打印 上一主题 下一主题

[桌面系统] [TOMATO] 利用HTMLUnit网页自动化工具管理linksys路由器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-19 11:05 |只看该作者 |倒序浏览
本帖最后由 可可火山 于 2010-10-18 11:00 编辑

需求:
家里4M网络4人共享,6,7台电脑同时上网,网络流量和QoS管理的需求下,买了LinkSYS WRT54G,开始用DDWRT,但是它的QoS我的硬件太差所以选择了TOMATO。
TOMATO的工作很好,晚上大家上网游戏基本OK(有人开P2P软件的话还是有点卡的),白天大家都上班只有1,2台机器开着下载电影。这个时候QoS关掉比较好,开着速度被限制了(或者说TOMATO自带的QoS还不够灵活)。
问题:
路由器的QoS功能需要能定时打开关闭,我知道QoS是由路由器的tc控制的,但是我找不到命令管理界面对应的命令(有知道的请告知,谢谢)

解决:
后来我想既然是网页的管理界面,那就用一些网页自动化测试工具就应该可以实现吧,做了些常识,有些工具JavaScript出错,或者工作模式比较麻烦,最后用htmlunit实现了要的功能。

大概流程:
让htmlunit模拟浏览器,
打开QoS设置URL:http://192.168.1.1/qos-settings.asp
用户登录:
根据要求勾选Enable QoS 复选框。
点击Save按钮。

一开始我的Save一直没反应,因为这个路由器的界面很多是JavaScript写的,有些AJAX的概念。像“Save“按钮需要等待一下,具体详见HTMLUnit FAQ。

下面是我的代码:

  1. //CopyLeft:可可火山 softwarezjut@gmail.com
  2. import java.io.IOException;
  3. import java.net.MalformedURLException;

  4. import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
  5. import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
  6. import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
  7. import com.gargoylesoftware.htmlunit.Page;
  8. import com.gargoylesoftware.htmlunit.WebClient;

  9. import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
  10. import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
  11. import com.gargoylesoftware.htmlunit.html.HtmlForm;
  12. import com.gargoylesoftware.htmlunit.html.HtmlPage;

  13. public class ToggleQoS {

  14.     public static void main(String[] args) {

  15.         WebClient webClient = new WebClient();
  16.         HtmlPage page;
  17.         boolean bqostoon = false;
  18.         if (args.length > 0 && args[0].equalsIgnoreCase("on")) {
  19.             bqostoon = true;
  20.             System.out.println("I am going to turn on qos");
  21.         } else {
  22.             System.out.println("I am going to turn off qos");
  23.         }

  24.         try {
  25.             DefaultCredentialsProvider login = new DefaultCredentialsProvider();
  26.             login.addCredentials("admin", "admin");
  27.             webClient.setCredentialsProvider(login);
  28.             page = webClient.getPage("http://192.168.1.1/qos-settings.asp");

  29.             HtmlForm form = page.getForms().get(0);

  30.             HtmlCheckBoxInput qoscheckbox = form.getInputByName("f_qos_enable");
  31.             boolean bqosnow = qoscheckbox.isChecked();

  32.             if (bqosnow == bqostoon) {
  33.                 System.out.println("QoS already " + (bqosnow ? "on" : "off"));
  34.                 System.exit(0);
  35.             }
  36.             //Page qoscheckpage = null;
  37.             if (bqostoon) {
  38.                 System.out.println("now enable it");
  39.                 qoscheckbox.setChecked(bqostoon);
  40.             } else {
  41.                 System.out.println("now disable it");
  42.                 qoscheckbox.setChecked(bqostoon);
  43.             }         

  44.             //http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork
  45.             webClient.setAjaxController(new NicelyResynchronizingAjaxController());

  46.             HtmlButtonInput saveBtn = (HtmlButtonInput)((page).getElementById("save-button"));
  47.             if (saveBtn != null) {
  48.                 System.out.println("click save");
  49.                 saveBtn.click();
  50.             }


  51.         } catch (FailingHttpStatusCodeException e) {
  52.             e.printStackTrace();
  53.         } catch (MalformedURLException e) {
  54.             e.printStackTrace();
  55.         } catch (IOException e) {
  56.             e.printStackTrace();
  57.         }

  58.     }

  59. }
复制代码
QoS管理页面:

论坛徽章:
0
2 [报告]
发表于 2010-05-19 20:35 |只看该作者
又看到你了,火山

论坛徽章:
0
3 [报告]
发表于 2010-05-30 22:24 |只看该作者
是用htmlunit实现了?

论坛徽章:
0
4 [报告]
发表于 2010-06-28 22:45 |只看该作者
回复 3# 0vk0


是的,htmlunit主要是用来web自动化测试的。同类型软件或产品很多。尝试了下这个支持javascript较好。

论坛徽章:
0
5 [报告]
发表于 2010-06-28 22:45 |只看该作者
回复 2# zhoutao0712

兄弟是哪位那? zhoutao?

论坛徽章:
0
6 [报告]
发表于 2012-01-31 02:03 |只看该作者
本帖最后由 可可火山 于 2012-01-31 02:11 编辑

update:20120130
我的LinkSys WRT54G v1.0被我折腾成砖头了,用修复线N次尝试未果,最后买了ZD改的WR-500U,硬件性能非常不错。

同时对于上面的问题,最近也找到更高效的方法。
这些路由器由nvram来管理配置,找到对应的 key就可以了。

比如我的WR-500U
Tomato DualWAN
版本 1.28.0542 MIPSR1 K26 USB WR-500U专用版

对应有3处QoS
  • 新增功能-->智能QoS
  • 新增功能-->QoS限制
  • QoS 基本设置 //tomato传统QoS


对应的nvram分别是
  • SQ_enable=1
  • new_qoslimit_enable=1
  • qos_enable=0

比如我要关闭 新增功能-->智能QoS的话
root@WR500U:/opt# nvram set SQ_enable=0
root@WR500U:/opt# nvram commit
Commit... done.

就可以了,非常方便和高效。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP