思路:模拟http请求,调用路由器重启命令,路由器中的设置项,所有的操作都是一个url请求,只是每个请求都要带一个权限过去,这个权限就放在请求头中
说明:路由器的密码是base64编码后的结果,所以需要转一下。
重启命令:
http://192.168.2.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器
其他N多命令,f12自己看
<pre name="code" class="java">
request.addHeader("Referer", "http://192.168.2.1/");//没它不行,估计这里做了限制,以前没有是可以的(据资料说明)
完了路由器估计也可以暴力一下了。。。
import java.io.IOException;
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 Decoder.BASE64Encoder;
public class Demo {
public static void main(String[] args) {
String login_user = "admin";
String login_pw = "123456258";
String auth = "Basic " + getBASE64(login_user+":"+login_pw);
HttpClient httpClient = new DefaultHttpClient();
HttpUriRequest request= new HttpGet("http://192.168.2.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器");
request.addHeader("Authorization", auth);
request.addHeader("Referer", "http://192.168.2.1/");
// 打印请求信息
try {
// 发送请求,返回响应
HttpResponse response = httpClient.execute(request);
// 打印响应信息
System.out.println(response.getStatusLine());
} catch (ClientProtocolException e) {
// 协议错误
e.printStackTrace();
} catch (IOException e) {
// 网络异常
e.printStackTrace();
}
}
public static String getBASE64(String s) {
if (s == null) return null;
return (new BASE64Encoder()).encode( s.getBytes() );
}
}