通过修改 hosts 文件屏蔽广告

July 22, 2014

操作系统与开发环境

当需要发送一个请求的时候,操作系统会在查询 DNS 前,先查找 hosts 文件是否有对应域名的 ip 地址记录,如果有则使用 hosts 文件指定的 ip 地址,如果没有再向 DNS 查询。hosts 文件的要求是每一行一条记录,每条记录是一个 ip 地址和对应域名的一一对应。

文件规则

  • 每行只能有一条记录
  • 每条记录是 ip 地址和域名的一一对应
  • ip 地址和域名之间至少需要一个空格
  • 域名不支持通配符

屏蔽广告

我一般通过浏览器的 debug 工具,查看网页都加载了哪些广告,把那些请求广告的 HTTP 请求的目标地址加入到我的黑名单里,也就是 hosts 文件里,然后把 ip 指向 127.0.0.1 ,这样广告请求就失败了,我也就看不见广告了。

浏览器屏蔽广告

很多浏览器都有屏蔽广告的插件,或者功能,他们也是收集一个广告的黑名单,每次需要浏览器发起 HTTP 请求前,浏览器可以通过这个黑名单进行批评,如果在黑名单内的,那么直接拒绝本次请求,这样就可以屏蔽广告了。由于是在应用层实现的,所以要比 hosts 来得更灵活一些,比如可以使用通配符,但是也带来了性能的影响。我在比较旧的电脑上使用 chrome 的 adblock 的时候,明显能感觉内存吃紧。

翻墙

、去除广告是修改 hosts 文件的一大运用。当然 hosts 的本意不是让你屏蔽广告的。不过 hosts 在中国有另外一个特色的运用,就是翻墙。其实不能算是翻墙,但是偶尔还是能奏效的。比如 google ,不是 google 的所有 ip 都被墙掉的。

ip 地址

一般可以使用 127.0.0.1 ,这个是回环地址,这个请求到达网卡口又回来了,不会到达局域网的。如果你的系统上有其他服务器服务的话,可以考虑使用 0.0.0.0 ,这样你的服务器程序就不会收到一大堆没用的请求了。

github

本来是把 hosts 文件直接拷贝到博客里的,但是博客编辑不是很方便,而且没有历史记录功能,所以我还是把它放到 github 上。万能的 github ,我是不是有点太浪费了~~

  • https://github.com/binkery/hosts
  • git clone git@github.com:binkery/hosts.git

--- EOF ---

添加新评论