它在旧配置下运行了一段时间,但后来由于某种原因停止了工作。
以下是我的 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%lo0
IPv6 环回,的条目::1
似乎被忽略了。sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
- 不需要添加
lookup file, bind
——/etc/resolv.conf
不需要
测试时要记住的一件重要事情是,某些应用程序有自己的 DNS 缓存。例如 Chrome 浏览器:在每次重新加载页面时查找 IP 地址是没有意义的,如果 IP 是facebook.com
一173.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
奇怪的是... 这有效!
脚步:
在你的终端上,运行
sudo vi /etc/hosts
或sudo pico /etc/hosts
保存以上内容。(来自评论
# Block Facebook
)在终端上,运行
dscacheutil -flushcache
。在 Safari 上,清除缓存。菜单栏选择
Develop
->Empty Cache
您可能需要重新启动计算机。问题就解决了!