自动Archer VR600 |通过Python AC1600

问题描述 投票:0回答:1

我在一个有时需要批量配置TP-Link ADSL路由器的环境中工作。众所周知,这确实会导致生产率问题。我使用python解决了这个问题,尤其是requests.session()库。它非常有效,特别是对于较旧的TP-LINK型号,例如TP-LINK Archer D5。

参考: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

通过浏览器配置时的键和SESSIONID。

key when configured via browser

Session ID when configured via browser

通过Python脚本配置时的键和SESSIONID。

Key when configured via browser

Key when configured via browser

如您所见,我正在尝试通过脚本复制步骤,但是由于无法创建将被路由器接受的唯一密钥而失败,因此无法生成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"))
python session automation python-requests
1个回答
0
投票

使用python requests库登录到路由器,这减少了任何手动工作的需要:


  • 转到登录页面,然后右键单击+检查元素。
  • 导航到资源选项卡,您可以在此处看到HTTP方法发生。
  • 使用一些用户名和密码登录,您应该会看到网络标签上相应的GET / POST方法。
  • 单击它,找到它发送到路由器的有效负载,这是通常为json格式,您需要在python中构建它脚本,并将其作为输入发送到网页。(幸运的是,为此there有很多教程。

[请注意,有时脚本的有效负载实际上是由某些javascript生成的,但是在大多数情况下,它只是一些局限在HTML源代码中的字符串。如果看到不了解的有效负载,只需在页面源中搜索即可。然后,您必须使用正则表达式之类的东西来提取它,并将其添加到您的有效负载中。

© www.soinside.com 2019 - 2024. All rights reserved.