Bettercap 局域网嗅探实战技术
原创
钟智强
钟智强
哪吒网络安全
2026年10月13日 11:41
马来西亚
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
控制台模块体系 · Wi-Fi 中间人嗅探 · BLE 侦察
环境:macOS(Darwin 25.1.0)· bettercap v2.41.0(darwin\_arm64, go1.23.5) 网段:192.168.3.0/24 · 网关:192.168.3.1 · 记录日期:2026-10-13 仅限授权实验环境使用,严禁对他人网络实施。
1. Bettercap 是什么
一句话定义:Bettercap 是用 Go 语言编写的跨平台网络攻击与侦察框架,常被称作「瑞士军刀」式的中间人(Man-in-the-Middle, MitM)测试工具。它把 ARP/DNS 欺骗、流量代理与改写、无线(Wi-Fi/蓝牙)侦察、服务发现等能力全部封装成可独立开关的「模块」,通过一个统一的交互式控制台(或 gRPC/REST API、Web UI)编排调用。
与老一代工具(Ettercap、dsniff 等)相比,Bettercap 的三个工程化优势:
·模块化:每个能力是独立 goroutine 中的模块,on/off 即启停,互不阻塞,状态由 help / active 一条命令全览。
·可编程:内置 caplet 脚本引擎(类似 msfconsole 的 rc 文件),include xxx.cap 可一键复现整套攻击链;set/get 变量系统贯穿所有模块。
·事件驱动:events.stream 模块(默认运行)把发现、嗅探、欺骗产生的所有事件统一成事件流,可被 api.rest 转成 WebSocket 推给 Web UI,也可被 caplet 以 on 语句订阅。
本笔记基于一次真实终端会话(macOS 上 sudo bettercap 启动 v2.41.0),完整复现「开局 help 检查 → 打开嗅探/侦察 → net.show 枚举 → arp.spoof 定向投毒 → 收包验证」的局域网嗅探链路,并附 BLE 侦察入口说明。
2. 控制台与模块体系:命令即模块
Bettercap 交互界面里「能敲的东西」分两层:全局命令与模块。这是理解本工具的关键心智模型——help 不带参数时列出的每一行「xxx > not running / running」都是一个模块,模块名本身就是命令的动词前缀。
2.1 全局命令层
| 全局命令 | 作用 | 备注 |
|---|---|---|
| help [MODULE] | 不带参数列出全部模块及运行状态;带模块名输出该模块专属子命令 | 开工第一步 |
| active | 只显示当前 running 的模块 | 比 help 更聚焦 |
| set NAME VALUE | 设置模块参数变量 | 如 set arp.spoof.targets |
| get NAME | 读取变量值,支持 \ 与 NAME\ 通配 | 排查配置用 |
| MODULE on / off | 启动/停止模块(模块通用子命令) | 核心开关 |
| sleep SECONDS | 脚本中暂停 | caplet 用 |
| include CAPLET | 加载并执行 .cap 脚本 | 自动化 |
| ! COMMAND | 在会话内执行 shell 命令 | 如 ! ifconfig |
| alias MAC NAME | 给设备 MAC 起别名 | net.show 可读性 |
| quit / clear | 退出 / 清屏 | — |
2.2 模块分类速览(对应本次 help 输出)
本次启动后 help 共列出 31 个模块,除 events.stream 外全部 not running。按用途归类如下,本笔记重点讲侦察类与欺骗类,BLE 与 Wi-Fi 射频类见第 4、5 节。
| 类别 | 模块 | 一句话职责 |
|---|---|---|
| 侦察 | net.recon | 邻居发现与端点跟踪,所有网络模块的地基 |
| 侦察 | net.sniff | 被动抓包:DNS/mDNS/ARP/HTTP 等协议解析上报 |
| 侦察 | net.probe | 主动探测(ARP/DNS/mDNS),加速发现沉默主机 |
| 侦察 | zeroconf | mDNS/Bonjour 服务发现,解析 \_airplay.\_tcp 这类服务记录 |
| 侦察 | api.rest | REST + WebSocket 接口,Web UI 的后端 |
| 欺骗 | arp.spoof | ARP 投毒,把目标流量牵引到本机(本笔记主角) |
| 欺骗 | dns.spooof | 伪造 DNS 应答,域名劫持 |
| 欺骗 | dhcp6.spooof / ndp.spooof | IPv6 侧对应物 |
| 欺骗 | mac.changer | 修改本机网卡 MAC |
| 代理 | http.proxy / https.proxy | Strangler 框架:承接并改写 HTTP(S) 流量 |
| 代理 | tcp.proxy / udp.proxy / packet.proxy | 任意协议转发改写 |
| 无线 | wifi | 802.11 帧操作:扫描、deauth 等(需监听注入网卡) |
| 无线 | ble.recon | 低功耗蓝牙设备扫描与事件订阅 |
| 服务端 | http.server / mysql.server | 伪服务承接被劫持的流量 |
| 其他 | caplets / events.stream / ui / c2 / gps / hid / can / wol / ticker / update / graph / syn.scan | 脚本库、事件流、图形界面、车载、唤醒等 |
2.3 开局状态检查:help(截图实证)
sudo bettercap 启动后,提示符显示当前网关与本机 IP(192.168.3.0/24 > 192.168.3.1)。敲 help,可见 arp.spoof、net.probe、net.recon、net.sniff、ble.recon、wifi 全部 not running——这就是嗅探前必须先解决的「三盏没点的灯」。
3. 本地 Wi-Fi 局域网嗅探全流程
本节为笔记核心。局域网嗅探的本质:Wi-Fi 交换机环境下本机默认收不到别人的流量,必须先用 arp.spoof 把目标流量「牵引」到本机,再用 net.sniff 收包解析。完整链路八步,先看流程图。
3.1 第一步:打开感知模块
net.sniff 负责收包解析,net.recon 负责维护邻居表(谁在线、IP/MAC 对应关系)。两者必须先于一切欺骗动作启动:
net.sniff on
net.recon on
此时 events.stream 会把 recon 的端点事件持续打到日志。注意:单独开 net.sniff 只能看到广播/组播和发给本机的包,看不到单播的他人流量——那是下一步 arp.spoof 的工作。
3.2 第二步:net.show 枚举邻居,确定目标 IP
net.show 以表格列出 net.recon 发现的所有端点:IP、MAC、Name(主机名)、Vendor(OUI 厂商)、Sent/Recvd(字节数)、Seen(最后可见时间)。本次实验网段内先只发现网关一台:
192.168.3.0/24 > 192.168.3.1 > net.show
IP MAC Name Vendor Sent Recvd Seen
192.168.3.1 36:27:10:c7:dd:40 bridge0 0 B 0 B 02:16:04
图 4 同时演示了紧接着的三连动作与一个重要现象:先 set arp.spoof.targets 192.168.3.1 圈定网关,再 arp.spoof on。日志依次出现:
·arp.spoof enabling forwarding —— 模块自动打开系统 IP 转发,保证被劫持流量不断网(不断网是隐蔽性的前提)。
·arp.spoof starting net.recon as a requirement for arp.spoof —— 模块依赖自动拉起:arp.spoof 强制要求 net.recon 在跑。
·arp.spoof arp spoofer started, probing 1 targets. —— 投毒循环启动,目标数 = 你 set 的条目数。
3.3 高频踩坑:could not find spoof targets
若先 arp.spoof on 而忘了 set arp.spoof.targets(或目标 IP 不在邻居表里),日志会以约 200 毫秒一条的速度疯狂刷:
[02:27:21] [sys.log] [war] arp.spoof could not find spoof targets
图 5 的价值在于状态与故障的对照:help 显示 arp.spoof > running、net.recon > running、net.sniff > running,三个灯都亮了,但模块「跑着」不等于「干活」——running 只代表 goroutine 存活,warn 刷屏说明投毒循环空转。排障口诀:状态看 help,实效看日志。
3.4 修正:先 set targets 再 on,以及 /32 与 /24 的爆炸半径
正确顺序是先配置后启动。targets 支持逗号分隔的多 IP/CIDR。图 6 演示了把目标从单 IP 换成整段:
set arp.spoof.targets 192.168.3.0/24
arp.spoof on
[02:32:29] [sys.log] [inf] arp.spoof enabling forwarding
[02:32:29] [sys.log] [inf] arp.spoof arp spoofer started, probing 256 targets.
务必注意爆炸半径:probing 1 targets 只劫持一台设备;probing 256 targets 意味着对全网段每台主机双向投毒(对目标谎称「网关是我」,对网关谎称「目标是我」),整个 Wi-Fi 的流量都会过你的机器——带宽、CPU、以及法律风险同步放大。实验环境请始终优先 /32 定向。
3.5 ARP 投毒原理(为什么能收到别人的包)
ARP 协议(RFC 826)无状态、无认证:主机收到 gratuitous(免费/声称式)ARP 应答会直接刷新本地 ARP 缓存。arp.spoof 周期性对目标宣称「192.168.3.1 的 MAC 是本机网卡」,同时对网关宣称「目标的 MAC 是本机网卡」。两端缓存中毒后,单播流量全部经本机二层转发(enabling forwarding 的作用),net.sniff 即可在镜像位置收包解析。这就是经典的 MitM 位置获取,与交换网络是否「安全」无关——防它要靠 DAI(动态 ARP 检测)或静态 ARP 绑定。
3.6 加速发现与收包验证:net.probe 与 zeroconf 日志
net.show 列表稀疏时,沉默主机(不发广播的 IoT/手机)看不见。开 net.probe on:模块主动发 ARP 探测、DNS/mDNS 查询,逼所有主机回包从而进入邻居表。同时 net.sniff + zeroconf 会把劫持到的 mDNS 服务公告实时解出,图 8 是本次实测的「收获页」:
从图 8 可读出三类信息,逐条对应嗅探价值:
| 日志证据 | 解读 | 嗅探意义 |
|---|---|---|
| service nearby-presence-... detected for [192.168.1.13] (Android\_...local) | Android 设备的 Nearby Presence 服务 | 确认目标为安卓终端并暴露设备名 |
| \_airplay.\_tcp / \_raop.\_tcp / \_home-sharing.\_tcp detected for [192.168.2.1] (M2.local) | Mac mini(SFMac-mini)的投屏与共享服务 | 识别苹果生态主机与开放端口 |
| mDNS fe80::3427:... PTR query for \_clawdbot-gw.\_tcp.local | IPv6 链路本地地址发起的服务查询 | 即使 v6 侧流量也在被解析 |
| [zeroconf.service] service ... \_ssh.\_tcp.local detected ... 18b642 | 网内存在 SSH 服务宣告 | 攻击面清单自动成形 |
换句话说:arp.spoof 负责「把水管接到你家」,net.sniff/zeroconf 负责「看水里流过来什么」。设备名、服务类型、厂商 OUI、主机名(本例 bridge0、M2.local)这类元数据本身已是高价值侦察成果。
3.7 本笔记命令链总表(按敲入顺序)
| 序 | 命令 | 层级 | 作用 |
|---|---|---|---|
| 1 | help | 全局 | 检查模块状态,确认三盏灯未亮 |
| 2 | net.sniff on | 模块 | 启动被动抓包解析 |
| 3 | net.recon on | 模块 | 启动邻居发现,维护端点表 |
| 4 | net.show | net.recon 子命令 | 列出 IP/MAC/Name/Vendor,选定目标 |
| 5 | set arp.spoof.targets | 全局 set | 圈定投毒对象(先配后开!) |
| 6 | arp.spoof on | 模块 | 启动投毒,自动开转发、自动拉起 net.recon |
| 7 | net.probe on | 模块 | 主动探测,逼沉默主机现形 |
| 8 | 观察 events/zeroconf 日志 | — | 收包验证;嗅探成果实时滚动 |
| 9 | arp.spoof off; net.sniff off; net.recon off; quit | 模块+全局 | 实验结束必须回收,恢复网络原状 |
4. BLE(低功耗蓝牙)侦察入口
help 列表里的 ble.recon 就是 BLE 模块,与 net.recon 同构:负责扫描周边广播 BLE 广告包(beacon、手环、耳机、车钥匙)的设备并维护端点表。标准用法:
ble.recon on
ble.show
ble.set # 给设备起别名
ble.track on / off # 跟踪设备移动(RSSI 变化)
BLE 与 Wi-Fi 嗅探的本质差异:BLE 侦察基本是「被动收广告包」,不需要投毒这类主动攻击动作即可持续获得设备清单与 RSSI;但反过来,BLE 的深层交互(连接、GATT 读写、配对抓包)需要支持注入的蓝牙适配器。
平台限制提示:Bettercap 的 BLE 与 wifi 模块主要面向 Linux 内核的蓝牙/802.11 注入栈;在 macOS 上这两个模块虽出现在 help 列表,但启动往往因缺少监听/注入能力而失败或不可用。本次会话中 ble.recon 与 wifi 始终保持 not running,属于预期现象。要在真机上跑 BLE 嗅探,请换 Linux(如 Kali)+ 外置支持注入的蓝牙网卡(CSR8510、nRF52840 一类)。
5. Wi-Fi 射频层能力(wifi 模块)边界说明
第 3 节的链路是「连上 Wi-Fi 之后」的二三层嗅探;wifi 模块则工作在 802.11 帧层:扫描周边 AP 与终端、发 deauth 帧迫使客户端重连(配合捕获 WPA 四次握手)等。同样受 macOS 驱动限制,本机不可用;其命令形态供 Linux 环境参考:
wifi.recon onwifi.recon.networks listwifi.recon.clients 60wifi.deauth
帧层攻击会直接打断他人连接,属于对可用性的破坏动作,风险与法律后果远高于 arp.spoof,仅限完全隔离的自有实验网络。
6. 故障排查对照表
| 现象 | 根因 | 处置 |
|---|---|---|
| 日志刷 [war] arp.spoof could not find spoof targets | targets 未设置或目标不在邻居表 | net.show 确认 IP → set 正确 targets → 再 arp.spoof on |
| help 显示 running 但无流量 | 只劫持未收包,或 net.sniff 未开 | net.sniff on;确认模块依赖链完整 |
| net.show 列表长期只有一两台 | 沉默主机不发广播 | net.probe on 主动探测 |
| 被劫持设备断网 | 系统 IP 转发未生效(手动关过) | 确认日志出现 enabling forwarding;检查系统转发开关 |
| macOS 上 ble.recon/wifi 起不来 | 平台不支持注入栈 | 换 Linux + 兼容网卡,见第 4、5 节 |
| 退出后网络异常 | 投毒未回收就 kill | 规范收尾:arp.spoof off → 各模块 off → quit |
7. 合规红线
1.授权先行:仅在本机自建网络或持有书面渗透测试授权的网络中执行;arp.spoof 对未授权第三方构成《网络安全法》意义上的非法侵入与数据截取。
2.最小爆炸半径:targets 用 /32 定向单台实验机,禁止图省事直接 /24(probing 256 targets 即对全部邻居投毒)。
3.数据不落盘:嗅探到的凭证、设备名、服务清单属他人数据,实验结束即销毁,不上传、不留存。
4.可恢复:每次会话以 arp.spoof off、模块 off、quit 收尾,让 ARP 缓存自然老化,网络恢复原状。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论