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

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

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

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

攻防逻辑示意图 (Mermaid):

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

抓取握手包

跑字典/暴力破解

用户手机

路由器 AP

黑客 (监听模式)

本地电脑

得出明文密码


🛠️ 准备工作

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

📡 第一步:编写 Python 嗅探器抓取 EAPOL 包

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

核心代码 (sniffer.py):

from scapy.allimport*import sys # 设置要监听的网卡 (通常是 wlan0mon) IFACE ="wlan0mon"print(f"[*] 正在监听 {IFACE} 上的握手包...")defpacket_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)

实战操作:

  1. 运行脚本。
  2. 为了加速抓包,通常会使用 aireplay-ng 发送**“断网攻击 (Deauth)”**,强制目标设备掉线。
  3. 目标设备自动重连时,脚本就会抓到 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 defcalc_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)deftry_crack(ssid, dictionary_file):print(f"[*] 开始破解 SSID: {ssid}")withopen(dictionary_file,'r', errors='ignore')as f:for line in f: password = line.strip()iflen(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 欺骗攻击》!)

Read more

《并查集:算法中的高效集合操作利器》:一文带你掌握并查集数据结构

《并查集:算法中的高效集合操作利器》:一文带你掌握并查集数据结构

系列文章目录 文章目录 * 系列文章目录 * 一、认识并查集 * 1.并查集的定义 * 2.基本概念 * 2.1.集合的表示 * 2.2.合并操作 * 2.3.查询操作 * 3.基本操作 * 3.1初始化 * 3.2.查找 * 3.3.合并 * 4.优化技巧 * 4.1.路径压缩 * 4.2.按秩合并 * 5.代码完整实例 * 6.应用场景 * 6.1.图的连通性 * 6.2.社交网络分析 * 6.3.动态连通性问题 * 7.

By Ne0inhk
AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南

AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南

AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南 该指南聚焦 Prompt 与 Pandas 结合的实践应用,先阐述二者结合的价值 —— 降低 Pandas 学习门槛、提升数据处理效率,接着梳理代码生成、解释、优化等 6 大核心应用场景及对应 Prompt 目标。随后详解高质量 Prompt 设计的五大原则,强调需精准描述数据结构、明确操作目标等要点。通过 5 个实战案例,从基础数据清洗到批量生成报表,展示 Prompt 设计、模型输出与结果验证全流程,并给出 8 个高频问题的解决方案。最后总结核心价值,提供扩展学习建议,助力读者掌握 “自然语言驱动数据处理” 能力,形成高效工作流。 人工智能专栏介绍     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的

By Ne0inhk
企业微信自建应用实现接收消息和发送消息功能(python)

企业微信自建应用实现接收消息和发送消息功能(python)

# 这一周我不断的琢磨企业微信自建应用并且实现了自建应用的消息接收和发送功能 1.笔记,记录 第一步:打开企业微信后台 https://work.weixin.qq.com 1.1 如果没有企业可以在这里申请,如果有可以直接扫码登录 1.2 打开后台-应用管理-自建应用-创建应用——填写自建应用的logo,应用名称,应用介绍等信息。 1.3 获取自建应用的AgentId,Secret,以及我的企业-企业ID信息 第二步:初步测试发送消息功能(注意:将刚刚保存好的信息正确填入到相应的代码段) import json #用于处理json数据 import urllib.parse # 用于对URL进行解析和构建 import requests #用于发送HTTTP请求 # 企业ID agentid = # 应用ID # 应用Secret # 接收消息的用户 # 企业微信API的基础URL base = 'https://qyapi.

By Ne0inhk

Python 真实世界的数据科学(十二)

原文:Python: Real-World Data Science 协议:CC BY-NC-SA 4.0 四十二、使用回归分析预测连续目标变量 在前几章中,您了解了监督学习背后的主要概念,并为分类任务训练了许多不同的模型以预测组成员或分类变量。 在本章中,我们将深入研究监督学习的另一个子类别:回归分析。 回归模型用于在连续规模上预测目标变量,这使它们对于解决科学和工业应用中的许多问题具有吸引力,例如理解变量之间的关系,评估趋势或进行预测。 一个例子是预测未来几个月公司的销售额。 在本章中,我们将讨论回归模型的主要概念,并涉及以下主题: * 探索和可视化数据集 * 研究实现线性回归模型的不同方法 * 训练对异常值具有鲁棒性的回归模型 * 评估回归模型并诊断常见问题 * 将回归模型拟合到非线性数据 介绍一个简单的线性回归模型 简单(单变量)线性回归的目标是为单个特征(解释变量x)与连续值响应之间的关系建模的模型( 目标变量和)。 具有一个解释变量的线性模型方程定义如下: https://github.com/OpenDocCN/freelearn-ds-z

By Ne0inhk