我知道您的 Windows NT 主机文件中不应该有重复的条目,windows\system32\drivers\etc\hosts
但是如果有的话,预期的行为是什么?
Windows NT hosts 文件 ( windows\system32\drivers\etc\hosts
) 中可以有多个具有相同主机名但不同地址的条目。当您在网络上访问该主机时,Windows DNS 系统会将其解析为其中一个条目。我如何知道将使用哪个条目?
例如:
127.0.0.1 mydomain.com
192.168.1.1 mydomain.com
编辑:这个特定示例似乎强制了特殊行为。回送似乎会覆盖任何条目,无论顺序如何。
或者:
192.168.1.2 mydomain.com
192.168.1.1 mydomain.com
我看到列表中的第一个条目优先。
但是,我看到的行为是否有保证,是否特定于版本,或者通常不可靠?
我之所以问这个问题是因为我正在编写一些脚本来处理主机,并且我试图弄清楚我是否可以可靠地选择其中一个进行删除/注释掉,并且希望不会对用户的系统造成影响。
答案1
仅读取第一个。解析名称后,将不再读取该文件。
答案2
允许使用同一个域名的多个条目,这在某些情况下很有用。
正如我在问题中所述,在“正常”情况下,如果这些地址可以通过同一个适配器访问,则第一个地址似乎是被占用的地址。但如果其中一个条目是 loopback ( 127.0.0.1
),则它可能会优先。
有时,即使没有一个地址属于环回适配器,拥有多个具有相同域名的条目也是有意义的。如果计算机是多主计算机或多寻址计算机。 (谢谢杰德BP请参阅我的 OP 评论中的信息)。
如果每个地址都映射并在单独的行中使用,则单个 DNS 主机名可以对应多个 IP 地址。例如,您可以为以下多宿主或多寻址 DNS 主机添加行:
10.0.0.1 host-a.example.microsoft.com
10.0.0.2 host-a.example.microsoft.com
10.0.0.3 host-a.example.microsoft.com
我相信适配器偏好/优先级可能在这里发挥作用(您可以在网络设置中设置),尽管我无法测试它。环回很可能总是在适配器偏好中排在第一位。
答案3
我 5 分钟前尝试过,它以以下方式在没有 DNS 服务器的情况下运行到 Windows Hosts 文件中:
ip1,ip2,ipx 要解析的名称
抱歉我的英语...
答案4
> 环回似乎会覆盖任何条目,无论顺序如何。
您是否确保在进行更改后关闭并重新运行客户端(浏览器?)?如果没有,那么它很可能仍在使用旧值,并且直到重新启动后才能按顺序看到更改。此外,如果您正在运行 DNS 客户端服务,旧值将被缓存,因此您将看不到更改。
我做了一些测试,似乎第一个条目总是被使用的。
确保重新启动客户端,以确保它正在重新读取 HOSTS 文件,并且如果您正在运行 DNS 客户端服务,也请运行ipconfig /flushdns