小米路由器共享wifi的安全与绕过方法
小米路由器的共享wifi(认证域名:guest.miwifi.com)为访客给一种临时上网方式,但3分钟广告模式的限制让不少用户觉得麻烦。通过抓包分析和TCP连接保持技术,可以绕过这一限制,实现持续联网。本文介绍了一个自动化脚本解决方案,包括Windows批处理脚本和Python脚本,帮你自动连接共享wifi并保持网络畅通。
共享wifi的限制与绕过原理
小米共享wifi的广告模式允许用户观看3分钟广告换取上网权限,但每小时只能使用5次,且时间一到网络就会断开。经过研究发现:
1.TCP连接保持:如果在3分钟内维持一个活跃的TCP连接(比如持续发送网络请求),网络就不会中断。
2. 局限性:只有这个特定的TCP连接有效,其他新连接仍会被切断。
3. 解决办法:通过特定的网络配置,配合持续的TCP连接,可以让网络保持活跃。
解决方案概述
这个方案用一个Windows批处理脚本(.bat)协调以下步骤:
1. 断开现有网络连接。
2. 连接到指定的共享wifi。
3. 运行Python认证脚本(link.py)完成广告认证。
4. 运行Python保持脚本(keep.py)维持TCP连接。
5. 检测断线后自动重连。
脚本详解
1.Windows批处理脚本(main.bat)
这个脚本负责自动化整个流程,检查连接、认证和重连顺畅。
代码:
@echo off
:restart
netsh wlan disconnect :: 断开现有WiFi连接
ping 127.0.0.1 -n 2 >nul :: 延时1秒
netsh wlan connect name="WIFI" :: 连接名为WIFI的共享WiFi
ping 127.0.0.1 -n 10 >nul :: 延时9秒等待网络初始化
python link.py :: 运行认证脚本
ping 127.0.0.1 -n 2 >nul :: 延时1秒
python keep.py :: 运行保持TCP连接脚本
goto restart :: 断线后自动重连
使用方法:
1. 将代码保存为main.bat。
2. 修改name="WIFI" 为你的共享wifi名称(在电脑的wifi列表中查看)。
3. 检查好Python环境已安装,且link.py和keep.py在同一目录。
4. 双-click运行main.bat,脚本会自动执行连接和认证。
认证脚本(link.py)
这个Python脚本负责与小米共享wifi的认证服务器通信,完成广告认证。
代码:
# coding=utf-8
import requests
import time
import datetime
print("正在启动认证程序")
response0 = requests.get("http://guest.miwifi.com:8999/cgi-bin/luci/api/misns/sns_init")
deviceid = response0.text[26:62] # 提取设备ID
clientinfo = response0.text[78:142] # 提取客户端信息
times = (int(round(time.time() * 1000)) - 2000) # 生成时间戳
url1 = f"http://api.miwifi.com/guest_wifi/portal_config?callback=jQuery210032440425060714295_{times}&did={deviceid}&client_info={clientinfo}&_={times+2}"
url3 = f"http://api.miwifi.com/wifirent/api/ad_apply_rent?callback=jsonpCallback&router_id={deviceid}&client_info={clientinfo}&_={times+8}"
response1 = requests.get(url1) # 获取配置
response3 = requests.get(url3) # 申请认证
code = response3.text.find("0") # 检查认证状态
if code >= 0:
print("认证成功,网络已连接")
else:
print("失败,请重启连接程序")
功能:
1. 从guest.miwifi.com获取设备ID和客户端信息。
2. 构造认证请求,模拟广告认证流程。
3. 检查认证是否成功(返回代码“0”表示成功)。
注意:
1. 脚本依赖requests库,运行前需安装(pip install requests)。
2. 如果小米更新API接口,URL或参数可能失效,需重新抓包分析。
保持连接脚本(keep.py)
这个脚本通过持续向百度发送请求,维持TCP连接,检测网络不中断。
代码:
import requests
import time
client = requests.session()
print("正在保持连接!请勿关闭")
headers = {'Content-Type': 'application/json', 'Connection': 'keep-alive'}
while True:
url = "http://www.baidu.com"
r = client.get(url, headers=headers)
if r.status_code == 200:
print(f"当前时间为:{time.strftime('%H:%M:%S', time.localtime())}")
time.sleep(1) # 每秒请求一次
功能:
1. 创建一个会话,定期访问百度,保持TCP连接活跃。
2. 每秒打印一次时间,方便确认脚本运行状态。
3. 使用keep-alive头查看下连接不被服务器关闭。
使用步骤
准备环境:
1. 安装Python 3.x和requests库(pip install requests)。
2. 确认共享wifi的名称(比如“Xiaomi_Guest”)。
保存脚本:
1. 将批处理代码保存为main.bat。
2. 将认证脚本保存为link.py。
3. 将保持脚本保存为keep.py。
4. 三个文件放在同一文件夹。
修改参数:
1. 在main.bat中更新wifi名称。
2. 查看电脑已连接到共享wifi的信号范围内。
运行:
1. 双击main.bat,脚本会自动连接wifi、认证并保持连接。
2. 窗口会显示认证和连接状态,保持窗口开启。
断线重连:
1. 如果网络中断,脚本会自动重启流程,重新连接和认证。
注意事项
1. 绕过共享wifi限制可能违反小米的服务条款,仅限学习和测试用途,请勿滥用。
2. 保证在合法授权的网络上操作,避免侵犯他人隐私或网络权益。
网络稳定性:
1. 如果wifi信号弱,可能导致频繁断线,调整设备位置或检查路由器状态。
2. 选择稳定的网络环境以提高连接成功率。
脚本维护:
1. 小米可能更新共享wifi的认证机制,导致脚本失效。遇到错误时,用Wireshark抓包,检查新的API地址和参数。
2. 可以增加错误重试逻辑(比如认证失败后重试3次),提高脚本鲁棒性。
日志记录:
1. 在keep.py中添加日志保存功能(写入文件),方便排查问题。
2. 示例:with open('log.txt', 'a')as f:f.write(f'[{time}]Success\n')
错误处理:
1. 在link.py中加入重试机制,比如认证失败后等待5秒再试3次。
2. 示例:用try-except捕获网络异常,避免脚本崩溃。
自动化程度:
1. 将main.bat设为开机启动,设备一开机就自动连接。
2.Windows任务计划程序可实现此功能(搜索“任务计划程序”添加脚本)。
多wifi支持:
1. 修改main.bat,支持连接多个共享wifi(按信号强度选择)。
2. 用netsh wlan show networks获取wifi列表,动态选择。