首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python脚本控制TPLINK路由器

问如何使用python脚本控制TPLINK路由器
EN

Stack Overflow用户
提问于 2013-03-13 21:22:46
回答 4查看 17.9K关注 0票数 6

我想知道是否有工具可以让我连接到路由器并关闭它,然后从python脚本重新启动它。

我知道如果我写:

代码语言:javascript
复制
import os
os.system("ssh -l root 192.168.2.1")

我可以通过python连接到我的路由器。但是,我不知道如何申请路由器的密码,并登录到它,以便重新启动它。

因此,在做了一些工作之后,下面是我编写的代码,以便使用python脚本通过SSH会话连接到我的路由器:

代码语言:javascript
复制
import os, urllib, urllib2, re

def InterfaceControl():
    #os.system("echo training")
    os.system("ssh -l root 192.168.2.1")
    os.system("echo yes")
    os.system("echo My_ROUTER_PASSWORD")
    os.system("shutdown -r")



def main():
    InterfaceControl()


if __name__=="__main__":
    main()

问题是我仍然不能用这段代码连接到我的路由器,而且IDLE (我用来编写python脚本的编辑器)崩溃了。有人能帮我改进这段代码吗?

EN

回答 4

Stack Overflow用户

发布于 2017-11-30 12:14:22

这取决于您的tplink设备型号和固件,因为验证算法因型号而异。

我写了这个python脚本,它在我的tp链接W740N上工作得很好。代码解释了如何使用请求包在此设备上进行身份验证

代码语言:javascript
复制
#!/usr/bin/python3
# imports
from requests import get
from base64 import b64encode
from urllib.parse import quote


# constants
tplink = '192.168.0.1'
user = 'admin'
password = 'admin'
url_template = 'http://{}/userRpm/SysRebootRpm.htm?Reboot=Reboot'


if __name__ == '__main__':
    auth_bytes = bytes(user+':'+password, 'utf-8')
    auth_b64_bytes = b64encode(auth_bytes)
    auth_b64_str = str(auth_b64_bytes, 'utf-8')

    auth_str = quote('Basic {}'.format(auth_b64_str))

    auth = {
    'Referer': 'http://'+tplink+'/', 
    'Authorization': auth_str,
    }

    reboot_url = url_template.format(tplink)
    
    r = get(reboot_url, headers=auth)
票数 4
EN

Stack Overflow用户

发布于 2016-12-11 15:50:09

我认为您可以查看路由器管理页面并查看它发送的post参数。在脚本中,您可以模仿相同的情况。

我认为大多数路由器使用https上的基本身份验证。

编辑:找到了这个。

代码语言:javascript
复制
wget -qO- --user=admin --password=admin-password http://192.168.1.2/userRpm/SysRebootRpm.htm?Reboot=Reboot

源:http://blog.taragana.com/old-code-how-to-reboot-tp-link-router-11849

我的wget手册告诉我-q是用来保持安静的。不知道0-是什么。你也可以用curl做一些类似的事情。注意:某些tp-link设备需要发送referer报头。例如,在curl中,-H 'Referer: http://192.168.0.1'

我可以使用下面的代码在python中做同样的事情。

代码语言:javascript
复制
from urllib.request import urlopen, Request
import base64
req = Request('http://192.168.0.1/userRpm/SysRebootRpm.htm?Reboot=Reboot')
req.add_header('Authorization', ('Basic %s' % base64.b64encode('uname:pass'.encode('ascii')).decode('ascii')))
req.add_header('Referer', 'http://192.168.0.1')
urlopen(req)
票数 2
EN

Stack Overflow用户

发布于 2017-08-25 16:42:22

我认为对于一个新的固件版本,你需要referer和user-agent来工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15386582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档