有没有想过,你的电脑其实可以像个“监听器”,实时捕捉周围WiFi的蛛丝马迹? 是的,哪怕你不是黑客,也能用Python把网络流量“看个通透”。是不是已经有点坐不住了?直接开干!
1. 工具清单:配置前的准备动作
想嗅探网络数据,装备不能少:
Python 3.8+(基本操作)
Scapy库(网络数据包界的瑞士军刀)
无线网卡支持“监听模式”(monitor mode),推荐Alfa AWUS036NH
Linux系统 + root权限
合法授权的网络环境(别乱来哈,违法成本高)
小提醒:开启监听模式会让WiFi断网,建议准备第二条网络线或者热点兜底。
在开始写代码之前,先把下面这些包装好:
确保你用的是 Python 3.8 及以上:
python3 --version
如果你还没安装 Python,可以去官网 https://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. 关键提醒:安全红线不能碰!
别玩嗨了忘了底线,这些你必须知道:
必须得到网络所有者书面授权
明确告知会记录什么内容
只收集必要信息,用完及时清除
遵守所在地法律
记住这句话:“技术是中立的,用它的人才决定善恶。”
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!