一个 hosts 文件即可屏蔽所有 hosts 文件
作为一名专家,人们经常问我如何提升网站性能。有时,他们也会问我如何提升自己电脑上的网页浏览体验。对于这种情况,我的回答始终如一:最容易入手的就是修改 hosts文件。
保持清洁,远离污垢
如今的网络充斥着垃圾信息。大多数网站都充斥着追踪器、广告和其他各种会降低网站加载速度的恶意内容。为了避免这种情况,广告拦截器应运而生。它们提供了一种快速简便的解决方案(通常是浏览器扩展程序),可以屏蔽大部分不需要的内容。
遗憾的是,就用户体验而言,广告拦截器并不尽如人意。它们通常会增加浏览器的内存和 CPU 资源占用,反而会降低浏览速度。有些广告拦截器表现较好,甚至有些浏览器完全基于拦截垃圾内容的理念而设计,并且在这方面做得非常出色。但是,网络世界并不局限于浏览器,不是吗?
你电脑上的每个设备都在请求访问网络。大多数主流应用程序都像你访问的其他媒体网站一样,充斥着大量的追踪器。有时,你甚至可以在用户界面上看到广告(你好,Skype。没错,我说的就是你,你这个淘气鬼)。
广告拦截器对此无能为力,但一个简单的 hosts 文件就能解决问题。
主持人……什么?
hosts文件是操作系统中的一个文件,用于将主机名映射到 IP 地址。它是一个纯文本文件。
“ hosts(文件) ”,维基百科
每当您的浏览器与网站交互时,它实际上都会向一个服务器发出请求,该服务器的位置通过其 IP 地址确定,例如 185.31.40.11(IPv4)或 2a00:b6e0:1:20:2::1(IPv6)。这与邮政地址非常相似。
现在想象一下访问一个网页,比如https://borisschapira.com 。你的浏览器是如何知道要连接哪个 IP 地址的呢?其实,浏览器会查询互联网的“电话簿”。至少会查询其中一个。这个被称为DNS 的“电话簿”会为浏览器解析 IP 地址。
我不知道你怎么样,反正我从来不用电话簿。大多数时候,我都会把要联系的人的地址都记在我的私人通讯录里。这就是hosts 文件的作用。每次电脑上的进程需要访问互联网上的资源时,它首先都会查阅 hosts 文件来找到资源的位置。
现在,假设你不希望这个过程在 badthings.com 域名上找到资源。很简单,只需将 badthings.com 域名关联到一个未指定的地址,例如 0.0.0.0,就能让它偏离方向。
所以基本上,如果有人列出了所有发生不良事件的域名,我们可以在 hosts 文件中将它们全部重定向到 0.0.0.0,从而使我们自己的 Web成为一个更酷的地方。
一个将它们全部收集起来的项目
我在这里描述的内容并不新鲜。一些有远见的人多年来一直在这样做,分享他们的主机文件。虚假新闻网站、游戏平台、色情网站、加密页面、诈骗网站和骗局,所有这些都被耐心地识别出来,并列在公开文件中。
我使用Steven Black 的“hosts”项目(一个 Python 脚本)将它们压缩到一个包含超过 7 万个域名的 2MB hosts 文件中。如果您好奇的话,我可以并且确实会使用我自己的白名单(原本被屏蔽的域名,但我不想阻止它们的请求)和重定向来修改结果(这使我能够撰写本文并在https://borisschapira-dev.com:10443/上查看结果,而该地址实际上指向我自己的机器)。
如果您不熟悉命令行,并且使用的是 Windows 10,hostsman应用可以帮您实现同样的目标(可惜的是,在我发布这篇文章的时候,该网站似乎已经无法访问。好在它有便携版)。即使我在 2015 年之前(法语版)修改过 hosts 文件,我也不建议您在旧版本的 Windows 系统上修改 hosts 文件,除非您想ipconfig /flushdns每 30 分钟运行一次。在 Linux 系统上,我听说有人使用dnscrypt-proxy ……但我自己从未尝试过。
我日常生活中的一些小贴士
有时,我需要暂时禁用 hosts 文件。例如,当我需要帮助Dareboost客户了解第三方脚本对其页面的影响时(因此,我需要自己加载这些第三方脚本)。
为了启用或禁用我的 hosts 文件,我使用了一个我开发并放在~/.profile文件2中的命令行函数:
function togglehost() {
if [ -e /etc/host.bak ]
then
sudo mv /etc/host.bak /etc/hosts
echo "Hosts file is active again"
else
sudo mv /etc/hosts /etc/host.bak
echo "Hosts file is set aside"
fi
}
该函数加载完毕后,激活或停用我的 hosts 文件就非常简单了:
$ togglehost
Hosts file is set aside
$ togglehost
Hosts file is active again
但由于我有时会忘记把它放回原位,所以我设置了一个例程,每分钟检查一次文件是否已放回原位,如果不在,就使用 Jaime Piña 的noti 工具触发通知提醒我。为了执行此定期检查,我使用crontab.
* * * * * if [ ! -e /etc/hosts ]; then /usr/local/bin/noti -t "Host file" -m "does not exists"; fi
我使用这种方法已经很多年了,有时候我会忘记 hosts 文件对我的保护有多么重要。每当我需要使用别人的电脑,或者暂时禁用 hosts 文件时,我才会意识到它带给我的安心感。
我很清楚,修改 hosts 文件虽然是个不错的技术方案,但它并不能完全替代广告拦截器(或许是我收集的文件还不够多),不过它确实能显著提升性能,我强烈推荐在日常浏览中使用。
你自己试试,然后告诉我你的想法!
概括
Hosts 文件是您计算机的内部地址簿,用于引导 Web 请求到达正确的服务器。如果您的 hosts 文件中充斥着指向空地址的域名,这些请求肯定会失败。人们共享 hosts 文件已经很多年了。现在,有一些解决方案可以将这些文件合并起来,并利用众包的方式来解决我们每天都要面对的混乱的网络环境。
