自动登录TP-LINK路由器Web控制页面的脚本
想要做的事情是写一个脚本自动登录TP-LINK路由器的Web控制页面,原本是一件很简单的事情,但一时没想明白就会觉得模糊不清。
我的路由器型号是TL-WR742N,连接后,在浏览器中输入默认管理页面的地址http://192.168.1.1 ,按下回车,就可以看到如下图所示的登录页面:
在火狐浏览器中按Ctrl+Shift+Q打开流量监控面板,然后输入密码,按下回车,会发现发送的http请求中即无GET参数,又无POST参数,那么,密码藏在哪里了?
调试html,可以看到,确认按钮是这么写的:
<label id="loginBtn" class="loginBtn" onclick="PCSubWin()">确认</label>
按下确认按钮后,会执行函数PCSubWin,跟踪这个函数,看到它的内容是:
function PCSubWin()
{
if(CheckPswLength() == true )
{
var password = $("pcPassword").value;
var auth = "Basic "+Base64Encoding("admin:"+password);
document.cookie = "Authorization="+escape(auth)+";path=/";
location.reload();
}
}
首先调用检查密码长度的函数CheckPswLength,若返回值为true,即密码长度没有问题,则读取$(“pcPassword”)中的值,按Ctrl+F查找“pcPassword”,得到:
<input class="text" id="pcPassword" name="pcPassword" type="password" maxlength="15" oninput="CheckPswLength()" onpropertychange="CheckPswLength()" onkeyup="CheckPswLength()" autocomplete="on">
也就是读取输入的密码字符串,之后用函数Base64Encoding对其进行加密,然后将加密后的字符串设置为cookie,以此作为验证条件。
我们在写自动登录脚本时只需要添加这样的cookie就可以了。如果用Python来写自动登录脚本则大概是这样的:
import requests
url = 'http://192.168.1.1/'
cookies = {'Authorization':'Basic YWRtaW46MTlzNDU2Nzg='}
r = requests.get(url, cookies=cookies)
print r.text