即使在杀死 mDNSResolver 后,Mac OSX 更改 /etc/hosts 也没有任何影响

Oli*_*ams 4 dns macos hosts

我在 Windows (10) 中没有遇到过类似的问题,而且我在文档中搜索的任何内容似乎都没有说明为什么,如果这不起作用,情况就是这样

  • 我打开终端并编辑 /etc/hosts(我在 PC 上做过很多次,几年前也在 OSX 上做过)
  • 如果那不起作用,我只是为了咧嘴笑我输入 sudo killall -HUP mDNSResponder
  • 然后为了更多的笑容我重新启动

这完全没有影响。谁能指出我为什么?谢谢。


更新:令人尴尬的事实是,我输入的行/etc/hosts是反向的,即域优先,如下所示:

mydomain.com  192.168.33.10    #wrong
192.168.33.10    mydomain.com  #what it should have been
Run Code Online (Sandbox Code Playgroud)

然而,接受的答案写得很好,值得赞赏。

Gor*_*son 18

我发现在 macOS (/OS X) 上使用 /etc/hosts 有两个常见问题:

  • 格式不正确:/etc/hosts 文件中的每个条目必须是一个 IP 地址,后跟一个空格或制表符,然后是名称,然后是行尾的换行符。尝试使用 cat -vet /etc/hosts 打印主机文件以使通常不可见的字符可见。每行应如下所示:

    127.0.0.1^Iwww.example.com$
    127.0.0.1 www.example.com$
    
    Run Code Online (Sandbox Code Playgroud)

    (“^I”是制表符,“$”是行尾的换行符。)如果条目列出了多个名称(也用空格或制表符分隔),也可以。

    如果您在“$”之前看到“^M”(回车),则您有 DOS/Windows 格式的文本,您需要删除回车。

  • 不正确的测试:不要使用命令行工具dighostnslookup,因为它们都直接测试 DNS,因此绕过 /etc/hosts 文件。浏览器有时会缓存内容,这可能会产生误导性的结果。测试系统名称解析系统的“正确”方法是使用以下dscacheutil命令:

    dscacheutil -q host -a name www.example.com
    
    Run Code Online (Sandbox Code Playgroud)

    ...但由于这很烦人,我倾向于只使用ping,然后看看它说要测试的地址。