- 论坛徽章:
- 0
|
本帖最后由 可可火山 于 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。
下面是我的代码:
- //CopyLeft:可可火山 softwarezjut@gmail.com
- import java.io.IOException;
- import java.net.MalformedURLException;
- import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
- import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
- import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
- import com.gargoylesoftware.htmlunit.Page;
- import com.gargoylesoftware.htmlunit.WebClient;
- import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
- import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
- import com.gargoylesoftware.htmlunit.html.HtmlForm;
- import com.gargoylesoftware.htmlunit.html.HtmlPage;
- public class ToggleQoS {
- public static void main(String[] args) {
- WebClient webClient = new WebClient();
- HtmlPage page;
- boolean bqostoon = false;
- if (args.length > 0 && args[0].equalsIgnoreCase("on")) {
- bqostoon = true;
- System.out.println("I am going to turn on qos");
- } else {
- System.out.println("I am going to turn off qos");
- }
- try {
- DefaultCredentialsProvider login = new DefaultCredentialsProvider();
- login.addCredentials("admin", "admin");
- webClient.setCredentialsProvider(login);
- page = webClient.getPage("http://192.168.1.1/qos-settings.asp");
- HtmlForm form = page.getForms().get(0);
- HtmlCheckBoxInput qoscheckbox = form.getInputByName("f_qos_enable");
- boolean bqosnow = qoscheckbox.isChecked();
- if (bqosnow == bqostoon) {
- System.out.println("QoS already " + (bqosnow ? "on" : "off"));
- System.exit(0);
- }
- //Page qoscheckpage = null;
- if (bqostoon) {
- System.out.println("now enable it");
- qoscheckbox.setChecked(bqostoon);
- } else {
- System.out.println("now disable it");
- qoscheckbox.setChecked(bqostoon);
- }
- //http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork
- webClient.setAjaxController(new NicelyResynchronizingAjaxController());
- HtmlButtonInput saveBtn = (HtmlButtonInput)((page).getElementById("save-button"));
- if (saveBtn != null) {
- System.out.println("click save");
- saveBtn.click();
- }
- } catch (FailingHttpStatusCodeException e) {
- e.printStackTrace();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
复制代码 QoS管理页面:
|
|