防火墙拦截规则 — 按应用、域名、IP 三层构建自定义黑名单
设计思路
PCAPdroid 防火墙把流量可见性(Connections 里能看到谁在联网)和流量阻断(不让它联网)结合在一起——不像系统防火墙那样盲封端口,而是基于你已经看到的流量行为来做决策。
三种规则粒度
| 规则类型 | 效果 | 适用场景 |
|---|---|---|
| 按应用 | 整个应用的所有出站流量被阻断 | 某些应用根本不需要联网(离线 App) |
| 按域名 | 匹配域名和它的所有子域(如 example.org 会阻断 api.example.org 但不会阻断 other.example.org) | 应用需要联网,但只想阻止特定第三方(广告 SDK、统计 SDK) |
| 按 IP | 特定 IP 地址被阻断 | 排查到某个已知恶意 IP,精准拦截 |
快速添加规则
从 Connections 列表
在 Connections 里长按某条连接 → 弹出菜单选:
- Block app:按应用拦截
- Block host:按域名拦截
- Block IP:按 IP 拦截
这是最常用的方式——先看到一条可疑连接,当场就把它封掉。
从 Apps 视图
Apps 标签页长按某个应用 → 直接把整个应用加入防火墙黑名单。被拦截的应用旁会显示禁止图标(ban 号)。
防火墙状态面板
汉堡菜单 → Firewall 进入防火墙管理:
- Status 页:统计当前已拦截多少条连接、最后一次拦截时间、运行中/离线开关(顶栏 on/off 可随时开关防火墙)
- Blocklist 页:所有已添加的拦截规则列表,长按可选中批量删除、导出为 JSON 文件
- 自动拦截新应用:顶栏菜单里有"Block newly installed apps"开关——开启后,新安装的应用默认被加入拦截列表,需要手动放行
<img src="images/firewall-drawer.jpg" alt="防火墙状态与规则面板" title="防火墙状态页" />
<img src="images/firewall-block-rule.jpg" alt="添加拦截规则" title="长按连接快速加拦截" />
连接上的拦截标记
被防火墙拦截的连接在 Connections 列表里会显示一个禁止图标(ban 号)。如果想找出所有被拦截的连接,用 Connections 顶栏漏斗图标(Edit Filter)→ Blocked by firewall 筛选。
解除拦截:长按一条被拦截的连接 → 选 Unblock。取消拦截时有两个选项:
- 永久取消:从拦截规则里删除
- 临时宽限:给一个宽限时间(比如 1 小时),时间到后自动重新拦截
已知限制
| 限制 | 说明 |
|---|---|
| DNS 查询不被应用级拦截 | Android 的 netd 守护进程代应用做 DNS 解析,PCAPdroid 无法把 DNS 查询准确归属到某个应用 |
| 不拦截 Google IPC | Firebase 推送通知、AdMob 广告等通过 Google 服务 IPC 传输,不走 PCAPdroid 代理 |
| 本地缓存仍能显示 | 应用已经缓存好的页面/图片,拦截后仍能从缓存展示,不代表联网成功 |
| Download Manager 仍会发起 | Android 系统 Download Manager 可能绕过应用级拦截直接发起下载 |
Root 模式下防火墙不可用
防火墙功能依赖 VpnService 代理层——所以在 Root 模式下(root capture)不生效。这点一定要记住:Root 模式抓包和防火墙互斥,二选一。