自动化Archer VR600 |通过Python AC1600

时间:2019-12-22 07:45:11

标签: python session automation python-requests

我在一个偶尔需要批量配置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。

key when configured via browser

Session ID when configured via browser

通过Python脚本配置时,

KEY和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"))

1 个答案:

答案 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 库登录路由器,这样就无需进行任何手动操作:


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

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