用Python自动登录TP-LINK路由器,获取信息,重启等操作

思路:想获取TP-LINK里面的所有信息,必须首先登录,然后提交相应的操作(比如重启)

1、 做任何操作,首先得登录到路由器
界面上面默认只有一个“密码”输入框,这里随便输入一个123密码发现,TP-LINK提交后的密码为加密后的,分析js就可以看到加密方法(下面会附上代码),再把加密后的密码提交就搞定啦
路由器登录post信息截图(TP-LINK关掉了页面右键功能,可以手动打开浏览器的开发者工具,网络部分查看):
自动登录TP-LINK路由器,获取所有信息,重启等等,实用方法

附上Python实现登录的方法

#!/usr/bin/env python

-- coding:utf8 --

‘’’
Author : mafei
Date : 18/1/20
‘’’
import requests
import json

加密提交后的密码,可以把自己的密码提交到这个方法,再跟TP-LINK页面中实际提交的密码值做比对

def encrypt_pwd(password):
input1 = “RDpbLfCPsJZ7fiv”
input3 = “yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW”
len1 = len(input1)
len2 = len(password)
dictionary = input3
lenDict = len(dictionary)
output = ‘’
if len1 > len2:
length = len1
else:
length = len2
index = 0
while index < length:
# 十六进制数 0xBB 的十进制为 187
cl = 187
cr = 187
if index >= len1:
# ord() 函数返回字符的整数表示
cr = ord(password[index])
elif index >= len2:
cl = ord(input1[index])
else:
cl = ord(input1[index])
cr = ord(password[index])
index += 1
# chr() 函数返回整数对应的字符
output = output + chr(ord(dictionary[cl ^ cr]) % lenDict)
return output

提交登录请求的方法

def login(password=’’):
encrypt_password = encrypt_pwd(password)
url = ‘http://192.168.1.1/’
headers = {‘Content-Type’: ‘application/json; charset=UTF-8’}
payload = ‘{“method”:“do”,“login”:{“password”:"%s"}}’ % encrypt_password
response = requests.post(url, data=payload, headers=headers)
response_body = json.loads(response.text)
return response_body

if name == ‘main’:
print(login(password=‘xxx’))
# 返回的数据样例,error_code为0表示登录成功,stok是动态生成的key {u’error_code’: 0, u’stok’: u’xxx’}
2、 获取登录之后的设备信息
先观察规律会发现,每次TP-LINK提交到后台的URL中都有一个stok的变量,是TP-LINK生成的动态key,每次登陆都会重新生成一个,这个stok在上一步登陆之后我们已经获取到了,后面就直接提交相应的json请求就可以了,到此已经已经全部搞定

def get_all_host(password):
stok = login(password).get(‘stok’)
payload = ‘{“hosts_info”:{“table”:“host_info”},“method”:“get”}’
headers = {‘Content-Type’: ‘application/json; charset=UTF-8’}
url = ‘%sstok=%s/ds’ % (‘http://192.168.1.1/’, stok)
response = requests.post(url, data=payload, headers=headers)
return response.text

if name == ‘main’:
print(get_all_host(password=‘xxx’))

返回的样例数据

{ “hosts_info”: { “host_info”: [ { “host_info_1”: { “mac”: “4c-32-75-29-5a-f3”, “type”: “1”, “blocked”: “0”, “ip”: “192.168.1.104”, “hostname”: “mafeiMBP”, “up_speed”: “3487”, “down_speed”: “5733”, “up_limit”: “0”, “down_limit”: “0”, “cfg_valid”: “0”, “is_cur_host”: “1”, “ssid”: “”, “wifi_mode”: “0”, “plan_rule”: [ ] } }, { “host_info_4”: { “mac”: “48-d2-24-ed-51-a4”, “type”: “1”, “blocked”: “0”, “ip”: “192.168.1.103”, “hostname”: “Lenovo%2DPC”, “up_speed”: “5733”, “down_speed”: “1975”, “up_limit”: “0”, “down_limit”: “0”, “cfg_valid”: “0”, “is_cur_host”: “0”, “ssid”: “”, “wifi_mode”: “0”, “plan_rule”: [ ] } }, { “host_info_2”: { “mac”: “90-8d-6c-0a-a6-8d”, “type”: “1”, “blocked”: “0”, “ip”: “192.168.1.101”, “hostname”: “iPad%2D2”, “up_speed”: “0”, “down_speed”: “0”, “up_limit”: “0”, “down_limit”: “0”, “cfg_valid”: “0”, “is_cur_host”: “0”, “ssid”: “”, “wifi_mode”: “0”, “plan_rule”: [ ] } } ] }, “error_code”: 0 }

这里附上完整源代码

#!/usr/bin/env python

-- coding:utf8 --

‘’’
Author : mafei
Date : 18/1/20
‘’’
import requests
import json

class LoginTpLink(object):
def init(self):
self.password = ‘xxx’
self.stok = self.login(self.password) # 初始化类的时候就自动登录,获取到stok(动态key)

# 加密密码的方法
def encrypt_pwd(self, password):input1 = "RDpbLfCPsJZ7fiv"input3 = "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW"len1 = len(input1)len2 = len(password)dictionary = input3lenDict = len(dictionary)output = ''if len1 > len2:length = len1else:length = len2index = 0while index < length:# 十六进制数 0xBB 的十进制为 187cl = 187cr = 187if index >= len1:# ord() 函数返回字符的整数表示cr = ord(password[index])elif index >= len2:cl = ord(input1[index])else:cl = ord(input1[index])cr = ord(password[index])index += 1# chr() 函数返回整数对应的字符output = output + chr(ord(dictionary[cl ^ cr]) % lenDict)return output# 登录方法
def login(self, password=''):encryptPwd = self.encrypt_pwd(password)url = 'http://192.168.1.1/'headers = {'Content-Type': 'application/json; charset=UTF-8'}payload = '{"method":"do","login":{"password":"%s"}}' % encryptPwdresponse = requests.post(url, data=payload, headers=headers)stok = json.loads(response.text)['stok']return stok# 获取所有主机信息的方法
def all_host_info(self):payload = '{"hosts_info":{"table":"host_info"},"method":"get"}'response = self.post_tp_link(payload)return response.text# 重启路由器的方法
def reboot(self):payload = '{"system":{"reboot":null},"method":"do"}'response = self.post_tp_link(payload)return response.text# 为了通用,封装的post方法
def post_tp_link(self, payload):headers = {'Content-Type': 'application/json; charset=UTF-8'}url = '%sstok=%s/ds' % ('http://192.168.1.1/', self.stok)response = requests.post(url, data=payload, headers=headers)return response

if name == ‘main’:
login_tp_link = LoginTpLink()

result = login_tp_link.reboot()
import pprint
pprint.pprint(json.loads(result))

原文链接

https://blog.51cto.com/mapengfei/2063279

服务推荐

  • 蜻蜓代理
  • 代理ip
  • 微信域名拦截检测
  • 微信域名检测api

自动登录TP-LINK路由器,获取所有信息,重启等等,实用方法相关推荐

  1. html link 怎么设置密码,TP-Link 无线路由器设置密码方法_设置tp link路由器的无线密码方法图解...

    下面介绍TP-Link无线路由器如何设置无线接入密码,如果您的tp link无线路由器还没有设置好上网连接的话请参考 1.登录路由器的设置界面. 打开网页浏览器,在浏览器的地址栏中输入路由器的IP地址 ...

  2. php.c drcom,校园网绕过Drcom安装自动登录程序到路由器

    简单记录一下,怎么在路由器上安装drcom脚本,实现自动登陆,一个路由器,全寝室都可以使用的方法. 安装固件: 我这里使用的是newifi mini型号的路由器 下载后,插拔一次路由器,按下路由器上的 ...

  3. 自动化脚本——涉及弹窗,自动登录,截图,获取用户权限,打包程序等

    2020暑期XX银行实习-一个自动化脚本 实习背景 主功能介绍 获取用户权限和禁用鼠标键盘 对话框 使用谷歌浏览器chrome自动登录网页 chromedriver 模拟鼠标点击以及键盘输入 截图 所 ...

  4. Python自动化脚本——涉及弹窗,自动登录,截图,获取用户权限,打包程序等

    2020暑期XX银行实习-一个自动化脚本 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高 ...

  5. android自动登录简书,android 手机号实现登录功能

    先看看效果 image.png 我的这个登录功能是手机号和密码都已经在后台数据库有存储的,所以是直接登录. 重点有三个: 1.账号密码的存储,实现自动登录: 2.网络通信: 3.密码一定要Md5加密之 ...

  6. 带你一步一步实现验证码登录和自动登录

    文章目录 1.实现最简单的登录 2.过滤器处理中文乱码 3.编写最简单前端页面 4.编写验证码servlet 5.修改前端页面,添加验证码和自动登录按钮 6.实现自动登录 7.前端脚本编写:读取coo ...

  7. 【原来Python爬虫还可以这么玩!】python爬虫自动化实现B站自动登录

    从新开始吧,而不是重新开始 哈喽,大家好呐,很久不见,甚是想念! 小夜斗又和大家见面啦,距离小夜斗上次更新爬虫文章又过去了很久辽! 因为在学校的时候有太多事情要做了,就疏忽了博客的更新呐,感觉以后还是 ...

  8. Ubuntu Mate 开机自动登录

    如果使用Ubuntu Mate想直接开机自动登录,那么可以尝试 先打开 60-lightdm-gtk-greeter.conf 文件 sudo nano /usr/share/lightdm/ligh ...

  9. Selenium 自动登录淘宝,我无意间发现了登录漏洞!

    G作者:Pineapple_C 原文链接:http://suo.im/6toKOR 注意:本文经过原文作者授权发布,大家可以关注他的博客,和作者一起学习. 这篇文章是一个很好的学习例子,作者能够在学习 ...

  10. windows7下实现用户自动登录

    使用情景: 1.所用的用户有时要用到远程登录或者网上邻居之类的,设有密码,但又不想每次开机时输入密码登陆,实现开机自动登陆到桌面. 2.有多个用户,想实现开机自动登陆到某一个用户. 3.装了VMwar ...

最新文章

  1. Data - 【转】数据分析的道与术
  2. 每天学一点flash(15) xml的一些常见写法
  3. 2021综述:视频监控中的多目标跟踪
  4. jenkins配置小结
  5. 内存不能为read进不去桌面_四级报名进不去怎么办
  6. java activemq 断线_java - 防止ActiveMQ重新连接失败时自动退出 - SO中文参考 - www.soinside.com...
  7. mybatis学习(20):模糊查询$
  8. 【PetShop 4.0学习】1.技术特点
  9. 【刷题】LOJ 6007 「网络流 24 题」方格取数
  10. Java 基本语法----数组
  11. .NET 类、网站dll反编译工具
  12. ADSL 错误691
  13. Android开发之EditText属性详解
  14. c语言实现简单的猜数字游戏(1~100)
  15. 计量经济学及Stata应用 第七章 异方差
  16. jfinal获取mysql_jfinal 调用mysql结果集-问答-阿里云开发者社区-阿里云
  17. ECharts之世界地图
  18. ctf解密图片得到flag_CTF从入门到进(fang)阶(qi)之MISC
  19. 蓝天保卫战-环保用电监管云平台(安科瑞 须静燕)
  20. 文本生成图像简述4——扩散模型、自回归模型、生成对抗网络的对比调研

热门文章

  1. android资源文件下的图片绝对路径,如何获取drawable目录下的图片绝对路径
  2. 处理器中基于PCIe Bus的NTB(Non-Transparent Bridge)支持
  3. [附源码]Nodejs计算机毕业设计西安凯特物流订单管理系统Express(程序+LW)
  4. MCGS昆仑通泰触摸屏与2台台达温控器通讯程序。采用modbus rtu
  5. 全景丨0基础学习VR全景制作,平台篇第19章:热点功能-文本
  6. 经常使用电脑易患焦虑抑郁症
  7. esp ghost引导_UEFI引导修复教程及工具
  8. java调用短信接口实现发送短信
  9. java inflater_Java Inflater finished()用法及代码示例
  10. 程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万