Fa1th 2015-11-23 03:04 采纳率: 33.3%
浏览 3251
已采纳

使用java登陆路由器并实现它的重启

代码如下,就是无法通过验证,我也知道是base64的编码,密码也知道,可就是没法进入,卡了两天了

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class restartRouter {

public static void main(String[] args){
    //"http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器";

        // 验证的用户名和密码

      String  login_user = "admin";

      String  login_pw = "123456";
      String auth = "Basic " + getBASE64(login_user + login_pw);

      System.out.println(auth);


      HttpClient httpClient = new DefaultHttpClient();
      HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器");
      //HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断线&wan=1");
      //HttpUriRequest request= new HttpGet("http://192.168.1.1/userRpm/StatusRpm.htm?Connect=连接&wan=1");
      //http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断线&wan=1

      //添加验证信息
      request.addHeader("Authorization", auth);




      // 打印请求信息   

        try {   
            // 发送请求,返回响应   
            HttpResponse response = httpClient.execute(request);   
            HttpEntity httpEntity =  response.getEntity();
            String result = EntityUtils.toString(httpEntity);

            // 打印响应信息   
            System.out.println(result);   
        } catch (ClientProtocolException e) {   
            // 协议错误   
            e.printStackTrace();   
        } catch (IOException e) {   
            // 网络异常   
            e.printStackTrace();   
        }   


}

public static String getBASE64(String s) { 
    if (s == null) return null; 
    return (new sun.misc.BASE64Encoder()).encode( s.getBytes() ); 
    }

}

  • 写回答

1条回答 默认 最新

  • 晓呆同学 2015-11-23 03:32
    关注

    不太清楚你要操作的是什么路由器,不过思路应该不难。
    1、模拟登录,获取登录后的cookie.
    2、带着得到的cookie请求需要的操作。

    这里你把登录账号和密码直接用base64编码传过去,应该是不成的。给你一个小例子:

         package com.daidai.util;
    
        import java.io.IOException;
        import java.util.HashMap;
        import java.util.HashSet;
        import java.util.Map;
        import java.util.Set;
        import java.util.regex.Matcher;
        import java.util.regex.Pattern;
    
        import org.jsoup.Connection.Method;
        import org.jsoup.Connection.Response;
        import org.jsoup.Jsoup;
        import org.jsoup.nodes.Document;
        import org.jsoup.nodes.Element;
        import org.jsoup.select.Elements;
    
        public class JsoupUtil {
    
        // 登录获取到的cookie
        static Map<String, String> cookieMap = new HashMap<String, String>();
    
        /**
         * @param uri
         * @param paramsMap form表单中的参数和值
         * @return
         */
        public static boolean login(String uri, Map<String, String> paramsMap){
    
            boolean loginFlag = false;
    
            Response response = null;
            try {
                response = Jsoup.connect(uri)
                        .userAgent("Mozilla")
                        .data(paramsMap)  
                        .method(Method.POST)
                        .timeout(20000)  
                        .execute();
    
                if (response.statusCode() == 200) {  
                    cookieMap = response.cookies();
                    loginFlag = true;
                } 
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return loginFlag;
        }
    
        /**
         * 提交评论内容
         * @param url
         * @param params    封装的参数
         */
        public static void doPost(String uri, Map<String,String> paramsMap){
    
            Response response = null;
            try {
                response = Jsoup.connect(uri)
                        .userAgent("Mozilla/5.0")
                        .data(paramsMap)
                        .method(Method.POST)
                        .timeout(20000)
                        .cookies(cookieMap)
                        .ignoreContentType(true)
                        .execute();
    
                if (response.statusCode() == 200) {  
                    System.out.println("评论成功!");
                } else{
                    System.out.println("评论失败!(HTTP CODE:"+response.statusCode()+")");
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        }
    
    

    登录操作:

         System.out.println("正在进行登录......");
    
            Map<String, String> paramsMap = JsoupUtil.getParamsMap();
            paramsMap.put("username", userName);
            paramsMap.put("password", password);
    
            boolean flag = JsoupUtil.login("**********", paramsMap);
    
            if(flag){
                System.out.println("登录成功!");
            }else{
                System.out.println("登录失败请重新进行登录!");
                login();
            }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?