软件使用手册合辑

hosts 拦截广告是什么原理

在浏览器装拦截扩展、在手机装拦截应用,背后常见的是同一套机制:hosts 表。这篇讲清它为什么能拦广告、拦在哪个环节、边界在哪。相关文档:无Root手机去广告方案.md · 拦截规则源怎么选怎么更新.md


一、hosts 文件本来是干嘛的

互联网上的每台服务器都有 IP 地址,但人记不住数字,所以有了域名。在 DNS 系统普及之前,主机名到 IP 的映射就记在每个设备本地的一份 hosts 文件里——先查本地表,查不到才去问 DNS 服务器,这个优先级顺序至今保留在几乎所有操作系统里。

安卓也不例外:系统里同样有一份 hosts 表(完整路径 /system/etc/hosts),只是普通应用没有权限改它。

二、拦广告的动作发生在哪一步

一个广告能不能显示出来,前提是应用能连上广告服务器;而连服务器之前,得先把「广告域名」解析成 IP 地址。hosts 拦截就是在解析这一步动手脚:

应用请求 ads.example.com
        ↓
系统先查 hosts 表 —— 命中
        ↓
返回 127.0.0.1(本机)
        ↓
连接本机 → 什么都没有 → 广告加载失败

列表里每条记录都是「127.0.0.1 广告域名」的形式。命中即指向本机,请求根本到不了广告服务器——广告不是被藏起来了,而是压根没机会加载。整个动作发生在域名解析层,不分析页面内容,所以对所有应用、所有浏览器同时生效,也几乎不消耗资源:比对一张文本表,比任何页面分析都便宜。

三、为什么它拦不干净所有广告

hosts 拦截认的是域名。广告得有自己独立的域名,这条机制才有下手的位置。

所以用这套工具前要有合理预期:它对「域名已知」的广告效果最好,对同域投放无能为力。规则列表的覆盖面决定上限,列表本身则需要定期维护,见 拦截规则源怎么选怎么更新.md。

四、在安卓上怎么用上这套机制

改系统 hosts 需要写系统分区的权限,于是有两个入口:

  1. 已 Root 的设备:直接把合并后的规则写进系统 hosts 表,解析层生效,不占任何网络通道;
  2. 无 Root 的设备:退一步,用一条只在本机回环的 VPN 把出站请求过滤一遍,效果接近,代价是占用系统唯一的 VPN 通道。

两条路线各有一批工具。开源的 AdAway 把两种模式做进了同一个应用,规则源、允许与阻止列表、拦截日志都可在界面上管理——它的工作机制与两种模式的取舍,站点里有更完整的图文介绍。若不确定自己的设备适合哪条路,先读 无Root手机去广告方案.md。

同站更多文档

  1. 拦截规则源怎么选、怎么更新
  2. 无 Root 手机怎么去广告