为什么我通过 launchd 添加被阻止的站点后 /etc/hosts 没有阻止域名?

为什么我通过 launchd 添加被阻止的站点后 /etc/hosts 没有阻止域名?

我一直在尝试设置 Launchd,以在周一至周五上午 9 点至下午 3 点屏蔽 osX 10.12.2 上的几个网站

我设定launchdcp /etc/hosts_BLOCKED_sites.txt /etc/hosts

Launchd 似乎正在正确复制文件。

$ ls -la /etc/hosts   

    -rw-r--r--  1 root  wheel  715 Jan 10 15:01 /etc/hosts

 

$ sudo cat /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   


    # Blocked sites redirected to 0.0.0.0  
    0.0.0.0 reddit.com   
    0.0.0.0 www.reddit.com  
    0.0.0.0 facebook.com  
    0.0.0.0 www.facebook.com  

/etc/hosts但是,设置为阻止访问后,我仍然可以打开被阻止的网站。

关于为什么/etc/hosts不阻止访问这些网站,有什么建议吗?

我尝试过以下方法在 Chrome 上屏蔽网站,但均以失败告终:

  • sudo killall -HUP mDNSResponder从命令行
  • 我尝试通过以下方式刷新 Chrome DNS 缓存chrome://net-internals/#dns
  • 我尝试刷新 Chrome 套接字chrome://netinternals/#sockets
  • 我切换了 hosts 文件以将网站重定向到 127.0.0.1 ,它没有阻止该网站,而且我被告知重定向到 0.0.0.0 速度更快

这没什么区别。所有被屏蔽的网站仍然可以通过 Chrome v55.0.2883.95 访问。

答案1

我注意到您的 /etc/hosts 文件的权限为 600。该文件的权限通常应为 644。如果您的应用程序无法读取 /etc/hosts,那么它将仅使用 DNS。

答案2

输入 ipv4 + ipv6 的主机条目并运行

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

为了清除缓存,我仍然必须重新启动 Chrome 才能使主机条目生效。

我的主持人条目:

127.0.0.1       youtube.com
127.0.0.1       www.youtube.com
fe80::1%lo0      youtube.com
fe80::1%lo0     www.youtube.com

答案3

尝试将它们写为 127.0.0.1 的别名

127.0.0.1     localhost www.facebook.com www.reddit.com

答案4

您是否已验证 /etc/nsswitch.conf 中是否有如下一行:

主机:文件 DNS

如果文件中没有这样的行,或者行在文件之前有 dns,则首先进行 dns 查询,如果得到有效答案,则甚至不会查看 /etc/hosts 文件

相关内容