我在一个偶尔需要批量配置TP-Link ADSL路由器的环境中工作。众所周知,这确实会导致生产率问题。我使用python解决了这个问题,尤其是requests.session()库。尤其适用于TP-LINK Archer D5等较旧的TP-LINK型号。
参考:How to control a TPLINK router with a python script
我使用的方法是通过浏览器进行配置,使用Wireshark捕获数据包并使用Python复制它。 Archer VR600引入了新方法。使用浏览器开始配置时,主页会要求输入新密码。完成后,它会生成一个随机的长字符串(KEY),该字符串将发送到路由器。此密钥是随机且唯一的,基于此随机字符串JSESSIONID会在整个会话期间生成并使用。
AC1600 IP地址:192.168.1.1
PC IP地址:192.168.1.100
通过浏览器配置时,KEY和SESSIONID。
通过Python脚本配置时,KEY和SESSIONID。
如您所见,我正在尝试通过脚本复制步骤,但是由于无法创建将被路由器接受的唯一密钥而失败,因此无法生成SESSIONID并无法进行其余配置。
代码:
def configure_tplink_archer_vr600():
user = 'admin'
salt = '%3D'
default_password = 'admin:admin'
password = "admin"
base_url = 'http://192.168.1.1'
setPwd_url = 'http://192.168.1.1/cgi/setPwd?pwd='
login_url = "http://192.168.1.1/cgi/login?UserName=0f98175e8bd1c9297fc22ec6a47fa4824bfb3c8c73141acd7b46db283557d229c9783f409690c9af5e87055608b358ab4d1dfc45f17e6261daabd3e042d7aee92aa1d8829a8d5a69eb641dcc103b17c4f443a96800c8c523b911589cf7e6164dbc1001194"
get_busy_url = "http://192.168.1.1/cgi/getBusy"
authorization = base64.b64encode(
(default_password).encode()).decode('ascii')
salted_password = base64.b64encode((password).encode()).decode('ascii')
salted_password = salted_password.replace("=", "%3D")
print("Salted Password" + salted_password)
setPwd_url = setPwd_url + salted_password
rs = requests.session()
rs.headers['Cookie'] = 'Authorization=Basic ' + authorization
rs.headers['Referer'] = base_url
rs.headers[
'User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
print("This is authorization string: " + authorization)
response = rs.post(setPwd_url)
print(response)
print(response.text.encode("utf-8"))
response = rs.post(get_busy_url)
print(response)
print(response.text.encode("utf-8"))
response = rs.post(login_url)
print(response)
print(response.text.encode("utf-8"))
答案 0 :(得分:0)
使用python #!/bin/bash
echo "Please Enter Search String "
read filename
echo "Please Enter Search Path "
read path
{
echo "To:friend@gmail.com"
echo "From:myemail@gmail.com"
echo "Subject:This is an sSMTP Test Email "
find "$path" -name "$filename" > hello.txt
while read file_path;do
grep -Rin "$filename" "$file_path"
done < hello.txt
} | ssmtp myemail@gmail.com $To $From
库登录路由器,这样就无需进行任何手动操作:
请注意,有时脚本的有效负载实际上是由某些javascript生成的,但是在大多数情况下,它只是一些局限在HTML源代码中的字符串。如果看到不了解的有效负载,只需在页面源中搜索即可。然后,您必须使用正则表达式之类的东西来提取它,并将其添加到您的有效载荷中。