用Python做WiFi嗅探?5分钟上手黑客同款技能(附代码)
✨ 本文是【Python网络安全】入门教学文章,建议收藏!适合安全学习者、网络审计员、Python进阶者阅读。
有没有想过,你的电脑其实可以像个“监听器”,实时捕捉周围WiFi的蛛丝马迹? 是的,哪怕你不是黑客,也能用Python把网络流量“看个通透”。
是不是已经有点坐不住了?直接开干!
1. 工具清单:配置前的准备动作
想嗅探网络数据,装备不能少:
- ✅ Python 3.8+(基本操作)
- ✅ Scapy库(网络数据包界的瑞士军刀)
- ✅ 无线网卡支持“监听模式”(monitor mode),推荐Alfa AWUS036NH
- ✅ Linux系统 + root权限
- ✅ 合法授权的网络环境(别乱来哈,违法成本高)
⚠️ 小提醒:开启监听模式会让WiFi断网,建议准备第二条网络线或者热点兜底。
在开始写代码之前,先把下面这些包装好:
确保你用的是 Python 3.8 及以上:
python3 --version
如果你还没安装 Python,可以去官网 www.python.org 下载对应系统的安装包。
安装核心依赖:Scapy + HTTP & TLS 支持包
pip install scapy
如果你还想解析 HTTP 或 TLS 流量,还可以安装以下模块(可选但推荐):
pip install scapy[http]
pip install scapy-ssl_tls
系统工具支持(必须配置监听模式)
Scapy 默认只支持 Linux / macOS 下使用无线网卡的监听模式(monitor mode)。在 Linux 下:
- 切换网卡为监听模式(使用
airmon-ng工具):
sudo apt install aircrack-ng
sudo airmon-ng start wlan0
这会把你的无线网卡变成 wlan0mon 模式,方便 Scapy 抓包。
2. 捕获WiFi 802.11帧:窥探网络从这里开始
from scapy.all import sniff, Dot11
def show_packet(pkt):
if pkt.haslayer(Dot11):
print(f"[{pkt.time:.2f}] {pkt.addr2} → {pkt.addr1} type={pkt.type} subtype={pkt.subtype}")
sniff(iface="wlan0mon", prn=show_packet, store=False)
这个脚本会打印所有WiFi帧的信息(源地址、目标地址、类型等),几乎就是“网络监听实况转播”。
🎯 想只看“管理帧”?来点精细过滤:
sniff(iface="wlan0mon", prn=show_packet,
lfilter=lambda p: p.haslayer(Dot11) and p.type == 0,
store=False)
3. 抓包HTTP请求 + SNI字段,监听网页访问
Scapy也能“监听”网站访问请求,尤其是明文的HTTP,还有TLS握手中的SNI(域名指示)字段:
from scapy.all import sniff
from scapy.layers.http import HTTPRequest
from scapy.layers.ssl_tls import TLSClientHello
def http_tls_sniff(pkt):
if pkt.haslayer(HTTPRequest):
req = pkt[HTTPRequest]
print(f"[HTTP] {req.Method.decode()} {req.Host.decode()}{req.Path.decode()}")
elif pkt.haslayer(TLSClientHello):
sni = pkt[TLSClientHello].extensions.get('server_name')
if sni:
print(f"[TLS] SNI: {sni}")
sniff(iface="wlan0mon", prn=http_tls_sniff, store=False)
📊 统计显示:超90%的网站已启用HTTPS,SNI就是我们仅存的明文入口。
4. 追踪设备活动:MAC地址+频率统计
还可以做个小“侦探”,看看有哪些设备在周围发出探测请求(probe request),还可以统计它们出现的频率:
from scapy.all import sniff, Dot11ProbeReq
from collections import Counter
probe_counts = Counter()
def count_probes(pkt):
if pkt.haslayer(Dot11ProbeReq):
probe_counts[pkt.addr2] += 1
sniff(iface="wlan0mon", prn=count_probes, store=False, timeout=60)
print("Top 5 活跃设备:")
for mac, count in probe_counts.most_common(5):
print(f" - {mac}: {count} 次")
📈 后续还可以导出为CSV,用pandas+matplotlib画图,搞个“热点设备活跃图”都不是梦。
5. 关键提醒:安全红线不能碰!
别玩嗨了忘了底线,这些你必须知道:
- ✅ 必须得到网络所有者书面授权
- ✅ 明确告知会记录什么内容
- ✅ 只收集必要信息,用完及时清除
- ✅ 遵守所在地法律
📢 记住这句话:“技术是中立的,用它的人才决定善恶。”
6. 应用场景举个例:
| 用途 | 收益 |
|---|---|
| WiFi网络审计 | 检查加密设置、发现未知AP |
| 教学演示/安全培训 | 学生实战演练抓包分析 |
| 性能优化 | 查看丢包率、重传情况 |
| 信号覆盖评估 | 分析不同区域设备活跃程度 |
写在最后:
WiFi嗅探并不是“黑科技”,而是一项非常重要的网络安全技能。只要你掌握了基础工具,理解协议逻辑,你也可以像网络侦探一样,看清无线世界的流动轨迹。