You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python通过HTTP方法登录路由器?含HTTPS警告页绕过疑问

路由器HTTP/HTTPS登录问题解决方案

一、HTTP方式登录路由器失败的排查与修复

常见失败原因

登录失败通常由以下问题导致:

  • 登录接口URL错误:多数路由器的登录提交地址不是根路径(/),而是/login.cgi、/api/login这类特定路径
  • 请求参数不全:除用户名、密码、CSRF Token外,可能还有action=login这类隐藏字段未提交
  • 会话未保持:未用Session维持Cookie,导致登录状态无法跟踪
  • 密码未加密:路由器要求密码加密后传输(如MD5、SHA256),明文密码直接提交无效
  • 请求头校验:路由器拦截了非浏览器标识的请求(缺少正确的User-Agent)

修复步骤及示例代码

  1. 抓包确认真实登录信息:用浏览器F12打开开发者工具,在「网络」标签下监控登录过程,记录:
    • 登录请求的URL
    • 表单提交的所有参数(包括隐藏字段)
    • 密码的实际传输值(是否加密)
  2. 使用Session维持会话:确保请求携带路由器设置的Cookie
  3. 模拟浏览器请求头:添加正确的User-Agent
  4. 完整提交所有参数:包括从登录页提取的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:43:13