用Python做WiFi嗅探?5分钟上手黑客同款技能(附代码)

720 阅读3分钟

用Python做WiFi嗅探?5分钟上手黑客同款技能(附代码)

✨ 本文是【Python网络安全】入门教学文章,建议收藏!适合安全学习者、网络审计员、Python进阶者阅读。

image.png

有没有想过,你的电脑其实可以像个“监听器”,实时捕捉周围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嗅探并不是“黑科技”,而是一项非常重要的网络安全技能。只要你掌握了基础工具,理解协议逻辑,你也可以像网络侦探一样,看清无线世界的流动轨迹。