为什么我不能使用 Mountain Lion(OS X)上的 /etc/hosts 阻止 Facebook?

为什么我不能使用 Mountain Lion(OS X)上的 /etc/hosts 阻止 Facebook?

它在旧配置下运行了一段时间,但后来由于某种原因停止了工作。

以下是我的 Mountain Lion MacBook Air 的 /etc/hosts 文件:

127.0.0.1 reddit.com www.reddit.com
127.0.0.1 facebook.com www.facebook.com
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost

这会阻止 Reddit,但不会阻止 Facebook。

我尝试清除机器的 DNS 缓存(“sudo killall -HUP mDNSResponder”)、浏览器(FF 和 Chrome),并且尝试重新启动计算机。

我已将条目移至文件顶部本文的建议,但之前在底部的时候也没用,每次都能屏蔽 Reddit,但 Facebook 不行。

答案1

harrymc 很接近,但出于某种原因,OS X(自 10.8.2 起)不尊重 ::1 的 IPv6 环回地址(可能是错误),因此您必须使用 fe80::1%lo0。您需要阻止 IPv6 的原因是,如果您的 ISP 支持 V6,Facebook 将通过 V6 为您提供其网站。您可以通过安装浏览器插件来轻松验证这一点,该插件会在网站通过 IPv6 提供服务时显示一个图标。以前这对您来说不是问题的原因是因为 Facebook 可能最近才开始通过 IPv6 为其网站提供服务。

所以正确答案是:

# Block Facebook IPv4
127.0.0.1   www.facebook.com
127.0.0.1   facebook.com
127.0.0.1   login.facebook.com
127.0.0.1   www.login.facebook.com
127.0.0.1   fbcdn.net
127.0.0.1   www.fbcdn.net
127.0.0.1   fbcdn.com
127.0.0.1   www.fbcdn.com
127.0.0.1   static.ak.fbcdn.net
127.0.0.1   static.ak.connect.facebook.com
127.0.0.1   connect.facebook.net
127.0.0.1   www.connect.facebook.net
127.0.0.1   apps.facebook.com

# Block Facebook IPv6
fe80::1%lo0 facebook.com
fe80::1%lo0 login.facebook.com
fe80::1%lo0 www.login.facebook.com
fe80::1%lo0 fbcdn.net
fe80::1%lo0 www.fbcdn.net
fe80::1%lo0 fbcdn.com
fe80::1%lo0 www.fbcdn.com
fe80::1%lo0 static.ak.fbcdn.net
fe80::1%lo0 static.ak.connect.facebook.com
fe80::1%lo0 connect.facebook.net
fe80::1%lo0 www.connect.facebook.net
fe80::1%lo0 apps.facebook.com

答案2

尝试添加以下行/etc/resolv.conf

lookup file, bind

这应该会强制 OS X 在 dns 之前使用 /etc/hosts。唯一的问题是,如果您使用 dhcp,则每次重启时都会覆盖此文件。

答案3

我也曾为此感到沮丧。我喜欢只执行必要的步骤,只破解必要的配置文件,仅此而已。以下是截至目前哪些可行、哪些不可行、哪些必要或不必要所做的总结。今天

  • @jesse-endahl的 hack 确实有效。需要用于fe80::1%lo0IPv6 环回,的条目::1似乎被忽略了。

  • sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder- 不需要

  • 添加lookup file, bind——/etc/resolv.conf不需要

测试时要记住的一件重要事情是,某些应用程序有自己的 DNS 缓存。例如 Chrome 浏览器:在每次重新加载页面时查找 IP 地址是没有意义的,如果 IP 是facebook.com173.252.110.27分钟前的,那么现在应该还是相同的,对吧?这使得测试变得困难,因为 Chrome 需要几分钟才能使其缓存过期。除非您知道删除缓存的方法。

对我来说,一个很有效的测试方法是使用新的隐身窗口Chrome 的功能。每次您在 中更改某些内容时/etc/hosts,都会打开一个新的隐身窗口来查看结果,它应该会立即起作用。非隐身窗口最终也会起作用,只需几分钟即可。

答案4

Mac OS X El Capitan:版本 10.11.5

Safari:9.1.1

我必须综合使用上述所有答案才能最终屏蔽 Facebook。以下是我的/etc/hosts文件内容:

# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost
# Block Facebook
127.0.0.1   www.facebook.com
127.0.0.1   facebook.com
127.0.0.1   login.facebook.com
127.0.0.1   www.login.facebook.com
127.0.0.1   fbcdn.net
127.0.0.1   www.fbcdn.net
127.0.0.1   fbcdn.com
127.0.0.1   www.fbcdn.com
127.0.0.1   static.ak.fbcdn.net
127.0.0.1   static.ak.connect.facebook.com
127.0.0.1   connect.facebook.net
127.0.0.1   www.connect.facebook.net
127.0.0.1   apps.facebook.com
fe80::1%lo0 facebook.com
fe80::1%lo0 login.facebook.com
fe80::1%lo0 www.login.facebook.com
fe80::1%lo0 fbcdn.net
fe80::1%lo0 www.fbcdn.net
fe80::1%lo0 fbcdn.com
fe80::1%lo0 www.fbcdn.com
fe80::1%lo0 static.ak.fbcdn.net
fe80::1%lo0 static.ak.connect.facebook.com
fe80::1%lo0 connect.facebook.net
fe80::1%lo0 www.connect.facebook.net
fe80::1%lo0 apps.facebook.com
::1 www.facebook.com
::1 facebook.com
::1 login.facebook.com
::1 www.login.facebook.com
::1 fbcdn.net
::1 www.fbcdn.net
::1 fbcdn.com
::1 www.fbcdn.com
::1 static.ak.fbcdn.net
::1 static.ak.connect.facebook.com
::1 connect.facebook.net
::1 www.connect.facebook.net
::1 apps.facebook.com

奇怪的是... 这有效!

脚步:

  1. 在你的终端上,运行sudo vi /etc/hostssudo pico /etc/hosts

  2. 保存以上内容。(来自评论# Block Facebook

  3. 在终端上,运行dscacheutil -flushcache

  4. 在 Safari 上,清除缓存。菜单栏选择Develop->Empty Cache

  5. 您可能需要重新启动计算机。问题就解决了!

相关内容