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

sea*_*ieb 34 hosts-file osx-mountain-lion macos

它在旧配置中工作了一段时间,但由于某种原因停止工作。

这是我的 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
Run Code Online (Sandbox Code Playgroud)

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

我试过刷新机器的 DNS 缓存(“sudo killall -HUP mDNSResponder”),浏览器(FF 和 Chrome),我试过重新启动计算机。

我已经按照本文建议将条目移到文件的顶部,但之前它在底部时也不起作用。每次它都会阻止 Reddit 但不会阻止 Facebook。

Jes*_*ahl 44

harrymc 很接近,但出于某种原因,OS X(从 10.8.2 开始)不尊重 ::1 的 IPv6 环回地址(可能是一个错误),因此您必须使用 fe80::1%lo0。您需要阻止 IPv6 的原因是,如果您的 ISP 支持,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
Run Code Online (Sandbox Code Playgroud)

  • 嗨 Jesse,我将所有内容复制粘贴到我的 /etc/hosts 中,我仍然可以访问 Facebook。我还缺少什么吗? (3认同)
  • 在我退出重新启动 safari 后它起作用了 (3认同)

Joh*_*Siu 5

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

lookup file, bind
Run Code Online (Sandbox Code Playgroud)

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