用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. python项目实战:最简单的图片转字符画
  2. awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算
  3. 使用Struts2,Hibernate和MySQL创建个人MusicManager Web应用程序的研讨会
  4. Vue过渡 动画混入
  5. 西瓜创客python编程进阶收费_西瓜创客和编程猫有什么不同?哪个更值得报名?...
  6. c++ 实现录音并且指定到文件_搜狗发布四款AI录音笔,4大核心功能开启AI录音新时代...
  7. 东北大学计算机分数线2017,东北大学2017年艺术类专业录取分数线
  8. 基于keepalived实现多种模式的高可用集群网站架构
  9. android+动画悬浮窗口,悬浮窗能实现自定Animation动画效果吗?
  10. 搜索python题目的软件_Python编程快速上手——正则表达式查找功能案例分析
  11. openv 在 ubuntu(linux)上的编码编译
  12. 修改log4j的日志文件的日志级别
  13. 计算机两万字符英语文献翻译,自动化专业相关英文文献加翻译(20000字符).doc
  14. Apollo客户端使用指南
  15. linux有趣的命令播放电影,常用的Linux命令片段
  16. pjmedia系列之媒体设备pjmedia_snd_port
  17. Unity3D——加入剑痕效果(PocketRPG Trail插件)
  18. 离线数仓-01-项目介绍和用户行为数据采集
  19. 野火i.MX6ULL Pro开发板构建根文件系统
  20. 第1章计算机网络概述——1.互联网概述

热门文章

  1. html和css怎么设置字体,html css怎么设置字体大小
  2. Feign简介与简单应用
  3. 多表查询,2021全网最好没有之一
  4. 【ES6】阮一峰ES6学习之Class的继承
  5. 播客php,谈谈国内三大PHP播客系统代码试用体验和建议
  6. 用sympy计算雅克比矩阵
  7. 订单管理html页面,跟单王的特色之一就是网页版订单管理系统
  8. markdown工作随笔总结
  9. 今日头条 频道管理(删除、添加、拖动)
  10. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结