zoukankan      html  css  js  c++  java
  • 用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,然后把内容拷贝到代码里就行了。

    1526485512(1)

    3. 获得headers

    也是在刚才那个文件找到Request Headers然后把内容拷贝过去。

    4. 获得相应的函数调用信息

    譬如我想断开连接,于是进入路由设置→上网设置界面,通过Element找到按钮的html元素,最后找到它回调函数文件:

    image

    点进去文件后找到.action操作,这就是断开连接需要调用的函数了。

    image

    5. 运行代码并观察输出

    填好这些信息之后,运行代码并观察结果。如果调用成功,则打印:{u'error_code': 0}

    这就是TL-WR842N的路由器控制脚本,型号不同的则不一定适用。

    三、参考

    1. 使用xx-net后 不能用python重启路由 #10283

  • 相关阅读:
    峰Spring4学习(1)HelloWorld
    小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql
    前端实现某一列不能重复不能且不能为空
    jquery:给正则表达式添加变量
    css:width height
    让heigh:100%起作用
    jquery:选择器 过滤器
    vs:如何添加.dll文件
    jq:正则表达式
    css:html() text() val()
  • 原文地址:https://www.cnblogs.com/harrymore/p/9048948.html
Copyright © 2011-2022 走看看