Mountain Lion 上的 Hosts 文件突然停止工作

Mountain Lion 上的 Hosts 文件突然停止工作

几个月来,我一直使用我的 hosts 文件(位于 /private/etc/hosts)来屏蔽工作日中分散注意力的网站。到目前为止,这种方法一直很有效。今天它突然停止工作了。

来自 hosts 文件中的一些示例行:

127.0.0.1 Facebook.com
127.0.0.1 www.Facebook.com

我按照以下步骤将该文本放入 hosts 文件中:

sudo nano /etc/hosts
写入上述行,然后按 ^O 写入文件,按 Enter 确认文件名,按 ^X 退出编辑器。

在本地主机 IP 和域名之间我有一个制表符。行尾是 Unix 样式 (LF),奇怪的是,当我使用该ping命令时,它似乎可以正常工作:

ping facebook.com
PING facebook.com (127.0.0.1): 56 个数据字节
来自 127.0.0.1 的 64 字节:icmp_seq=0 ttl=64 时间=0.137 毫秒
来自 127.0.0.1 的 64 字节:icmp_seq=1 ttl=64 时间=0.122 毫秒
来自 127.0.0.1 的 64 字节:icmp_seq=2 ttl=64 时间=0.118 毫秒
来自 127.0.0.1 的 64 字节:icmp_seq=3 ttl=64 时间=0.110 毫秒
^C
--- facebook.com ping 统计信息 ---
已发送 4 个数据包,已接收 4 个数据包,0.0% 数据包丢失
往返最小值/平均值/最大值/标准差 = 0.110/0.122/0.137/0.010 毫秒

但是当我尝试在 Safari 或 Firefox 中访问 facebook.com 时,我仍然可以访问该网站。我以类似方式阻止的其他网站也是如此。我清空了这两个浏览器的缓存,但这并没有解决问题。

我该如何解决这个问题?

更新 1: 我现在正在检查我以这种方式阻止的所有网站,发现不同域的行为并不一致。这些是我在 /private/etc/hosts 中阻止的“浪费时间的人”:

#阻止时间杀手
127.0.0.1 9gag.com
127.0.0.1 flabber.nl
127.0.0.1 geenstijl.nl
127.0.0.1 dumpert.nl
127.0.0.1 facebook.com
127.0.0.1 www.9gag.com
127.0.0.1 www.flabber.nl
127.0.0.1 www.geenstijl.nl
127.0.0.1 www.dumpert.nl
127.0.0.1 www.facebook.com
##

此列表中的所有站点都可以 ping 到127.0.0.1,但是9gag.comflabber.nl无法通过任何浏览器访问,但是geenstijl.nldumpert.nlfacebook.com 可达。

我尝试过重启,但问题没有解决。在出现此问题之前,我从未通过某种更新更改过系统配置。

更新 2: 三个小时前我可以facebook.com通过 Safari 和 Firefox 访问,现在却不能了。geenstijl.nl不过dumpert.nl仍然可以访问。在过去三个小时内我没有做任何更改,只是使用了 Word 并用 Safari 浏览网页。

更新 3: 现在,第二次更新四小时后,hosts 文件又恢复正常工作了。在摸索 hosts 文件的过程中,我删除了不起作用的条目,并逐个重新添加它们,并在添加后测试每一个条目。我不知道发生了什么,也无法再对流量运行 wireshark,因为我没有观察到任何错误行为。

更新 4: 问题又出现了。与更新 1 中相同的站点显示了错误的行为。

更新 5:
一切又恢复正常。当我再次遇到错误时,我会记住这里发布的解决方案。

答案1

OS X 中的 DNS 解析在从 Snow Leopard 更新到 Lion 时出现问题。全新安装后,一切都应该正常工作,但如果您选择了更新路线,事情可能会出现问题。

选项 1:IPv6 寻址

如果 IPv4 无法访问,许多网站和 ISP 都支持 IPv6。将定义在一开始的时候/etc/hosts这样:

# Block Facebook IPv4
127.0.0.1   www.facebook.com
127.0.0.1   facebook.com

# Block Facebook IPv6
fe80::1%lo0 www.facebook.com
fe80::1%lo0 facebook.com

选项 2:使用 DNSMasq

如果上述建议无效,您可以安装 DNSMasq

答案2

进行任何更改后,在命令行中/etc/hosts运行dscacheutil -flushcache以清除本地 DNS 缓存。对我来说,这每次都有效,但有一个例外:Firefox 有自己的 DNS 缓存,因此您必须重新启动它。

答案3

OSX 系统在其大多数网络操作中不使用 /etc/hosts。大多数情况下,终端/命令行命令(Unixy 内容)主要使用 /etc/hosts,而 Maccy (!) 中的任何内容都使用保存在其他地方的内部 plist 类型表。

这种用法不一致且存在问题,因为它使 OSX“unix”变得不确定。正如您所发现的。

我没有 Mac 了,无法确切地找出 Mac OSX 存储其 hosts 文件模拟的位置,但希望这些信息能为您指明正确的方向。

我知道它会在 /Library 目录(和/或 ~/Library)中,并且 plist 文件是压缩的,因此您不能只通过 grep 查找内容。嗯,“plutil”命令可以解压/显示 .plist 文件的内容(我想这就是名称)。也许从

find ~/Library /Library -iname "*host*" -ls

看看在像窗户一样复杂的泥沼中到底隐藏着什么。

它不完全是 unix (netbsd)...但它也不完全是...无论你怎么称呼它(GUI?)。甚至 Windows 也是一致的。也许是错的...但一致。

答案4

我发现,在 OS X 10.9 上,Safari 和 Firefox 可以继续访问被阻止的域,除非我在 etc/hosts 文件中实施了 IPv6 阻止。只有 Chrome 受到 IPv4 阻止的影响。

相关内容