用python控制路由器
前言
最近用爬虫爬豆瓣上的资料,无奈总是被封,agent伪装和cookie修改这些都用过了,可惜都起不了什么作用,到了一定次数,还是会返回403。想用代理ip,无奈免费的太不稳定,买收费的又有点没必要。今天在查资料的时候,读到一篇谈ADSL拨号代理的文章,刚好我又是用这种方式上网,于是想到了一个对付豆瓣反爬虫的办法,当爬虫检测到被封的时候,断开路由器连接,休眠一段时间之后继续爬。
ps:我的路由器型号是TL-WR842N
一、思路
1. 登陆路由器管理系统
2. 通过抓包工具找到的操作的调用函数
3. 调用函数
二、代码及具体操作
1. 具体代码
#!/usr/bin/env python # -*- coding: utf-8 -*- # 用来断开路由连接,目的是通过这个方法换ip import requests import json import ssl import time ssl._create_default_https_context = ssl._create_unverified_context data = { "method":"do", "login":{"password":"你加密后的密码"} # 登陆后观察获得 } # 根据自己的情况来填 headers = { 'Host':'192.168.0.1', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36', 'Accept':'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding':'gzip, deflate', 'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7,zh-TW;q=0.6', 'Connection':'keep-alive', 'Content-Length':'50', 'Content-Type':'application/json; charset=UTF-8', 'Origin':'http://192.168.0.1', 'Referer':'http://192.168.0.1/', 'X-Requested-With':'XMLHttpRequest' } url = "http://192.168.0.1/" html = requests.post(url,json=data,headers=headers,verify = False) print(html.headers) stok = json.loads(html.text)["stok"] full_url = "http://192.168.0.1/stok="+ stok +"/ds" Disconnect = {"network":{"change_wan_status":{"proto":"pppoe","operate":"disconnect"}},"method":"do"} # 通过观察获得 disconn_route = requests.post(url=full_url, json=Disconnect).json() print(disconn_route)
2. 获得登陆后加密的密码
进入你的路由器管理页,我的是http://192.168.0.1/,开启浏览器的抓包界面,我的是chrome,直接f12就行了,然后输入密码登录。
打开Network选项卡,找到第一个名为192.168.0.1的文件,在右侧找到Request Payload部分,在这里可以找到你登录时加密后的密码,实际上直接点view source,然后把内容拷贝到代码里就行了。
3. 获得headers
也是在刚才那个文件找到Request Headers然后把内容拷贝过去。
4. 获得相应的函数调用信息
譬如我想断开连接,于是进入路由设置→上网设置界面,通过Element找到按钮的html元素,最后找到它回调函数文件:
点进去文件后找到.action操作,这就是断开连接需要调用的函数了。
5. 运行代码并观察输出
填好这些信息之后,运行代码并观察结果。如果调用成功,则打印:{u'error_code': 0}
这就是TL-WR842N的路由器控制脚本,型号不同的则不一定适用。
三、参考
本文版权归作者(https://www.cnblogs.com/harrymore/)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可邮件(harrymore@126.com)咨询.