如何用Python通过HTTP方法登录路由器?含HTTPS警告页绕过疑问
路由器HTTP/HTTPS登录问题解决方案
一、HTTP方式登录路由器失败的排查与修复
常见失败原因
登录失败通常由以下问题导致:
- 登录接口URL错误:多数路由器的登录提交地址不是根路径(
/),而是/login.cgi、/api/login这类特定路径 - 请求参数不全:除用户名、密码、CSRF Token外,可能还有
action=login这类隐藏字段未提交 - 会话未保持:未用
Session维持Cookie,导致登录状态无法跟踪 - 密码未加密:路由器要求密码加密后传输(如MD5、SHA256),明文密码直接提交无效
- 请求头校验:路由器拦截了非浏览器标识的请求(缺少正确的User-Agent)
修复步骤及示例代码
- 抓包确认真实登录信息:用浏览器F12打开开发者工具,在「网络」标签下监控登录过程,记录:
- 登录请求的URL
- 表单提交的所有参数(包括隐藏字段)
- 密码的实际传输值(是否加密)
- 使用Session维持会话:确保请求携带路由器设置的Cookie
- 模拟浏览器请求头:添加正确的User-Agent
- 完整提交所有参数:包括从登录页提取的CSRF Token和其他隐藏字段
from bs4 import BeautifulSoup import requests # 模拟浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } with requests.session() as session: # 第一步:获取登录页,拿到Cookie和CSRF Token login_page = session.get('http://192.168.0.1', headers=headers) soup = BeautifulSoup(login_page.content, 'html.parser') # 提取表单中的所有必填字段(根据抓包结果调整) csrf_token = soup.find('input', {'name': 'csrf_token'})['value'] action_field = soup.find('input', {'name': 'action'})['value'] # 构造登录数据:如果密码需要加密,这里替换成加密后的字符串 login_payload = { 'username': 'admin', 'password': '你的加密后密码', 'csrf_token': csrf_token, 'action': action_field } # 第二步:提交登录请求(URL替换为抓包得到的真实接口) login_response = session.post('http://192.168.0.1/login.cgi', data=login_payload, headers=headers) # 验证登录成功:检查响应是否包含管理页特征字符串,或是否重定向 if "设备管理" in login_response.text or login_response.status_code == 302: print("登录成功") # 后续可通过session访问其他管理接口 dashboard = session.get('http://192.168.0.1/dashboard', headers=headers) print(dashboard.text) else: print("登录失败")
二、HTTPS访问时绕过警告页
路由器的HTTPS警告一般是自签名证书导致,部分还需要手动点击确认按钮才能进入登录页,处理方式如下:
方法1:忽略SSL证书验证
直接关闭requests的证书校验,同时禁用相关警告:
import requests # 关闭SSL证书警告 requests.packages.urllib3.disable_warnings() # 访问时添加verify=False参数 response = requests.get('https://192.168.0.1', verify=False)
方法2:自动提交确认页面表单
如果警告页是一个需要提交确认的表单,先抓取表单参数并自动提交:
import requests from bs4 import BeautifulSoup requests.packages.urllib3.disable_warnings() headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'} with requests.session() as session: # 访问警告页 warn_page = session.get('https://192.168.0.1', verify=False, headers=headers) # 判断是否为警告确认页 if "继续访问" in warn_page.text: soup = BeautifulSoup(warn_page.content, 'html.parser') confirm_form = soup.find('form') if confirm_form: # 拼接表单提交的完整URL form_action = confirm_form.get('action') if not form_action.startswith('http'): form_action = 'https://192.168.0.1' + form_action # 提取表单所有参数 form_data = {} for input_tag in confirm_form.find_all('input'): name = input_tag.get('name') value = input_tag.get('value') if name: form_data[name] = value # 提交确认表单,进入登录页 session.post(form_action, data=form_data, verify=False, headers=headers) # 后续执行正常登录流程(同HTTP版本) login_page = session.get('https://192.168.0.1', verify=False, headers=headers) # ... 提取CSRF Token、提交登录数据等操作
内容的提问来源于stack exchange,提问作者Lost
相关产品推荐
相关产品推荐

