hosts 文件被忽略,如何排除故障?

hosts 文件被忽略,如何排除故障?

Windows 计算机上的 hosts 文件用于将某些名称字符串绑定到特定 IP 地址,以覆盖其他名称解析方法。

通常,有人决定更改 hosts 文件,但发现更改无法生效,或者甚至 hosts 文件中的旧条目随后也被忽略。许多“陷阱”错误都可能导致这种情况,而找出哪个错误可能令人沮丧。

当面临 Windows 忽略 hosts 文件的问题时,可以遵循的全面故障排除协议是什么?


这个问题在 SO 上有重复,例如HOSTS 文件被忽略

然而,这些往往只针对特定情况,一旦原帖者犯的错误被发现,讨论就结束了。如果你没有犯过同样的错误,这样的讨论就没什么用了。所以我认为,制定一个解决所有主机相关问题的通用协议会更有帮助,该协议将涵盖全部案件。

答案1

根据我自己的经验以及我在 Google 上搜索时遇到的情况,可以尝试以下方法:

1. 你检查过它是否正常工作吗?

对主机的更改应立即生效,但 Windows 会缓存名称解析数据,因此一段时间内可能会使用旧记录。打开命令行 (Windows+R, cmd, Enter) 并输入:

ipconfig /flushdns

删除旧数据。要检查它是否有效,请使用(假设您的主机中有 ipv4 条目www.example.com或者在主机中添加 ipv6.example.com 的 ipv6 条目):

ping -4 www.example.com -n 1
ping -6 www.example.com -n 1

看看它是否使用了正确的 IP。如果是,则您的 hosts 文件没有问题,问题出在其他地方。

另外,您可以使用以下命令重置 NetBios 缓存(以管理员身份打开控制台,否则将失败):

nbtstat -R

您可以使用以下命令检查 DNS 缓存中的当前数据:

ipconfig /displaydns | more

注意:nslookup不查看 hosts 文件。请参阅NSLOOKUP 和 NBLOOKUP 给出一个 IP 地址;PING 找到另一个

2. 基础知识

  • 您的 hosts 文件命名正确吗?应该是hosts而不是host等等。
  • 扩展名是否正确?它应该没有扩展名(hosts不是hosts.txt)-如果您已将窗口配置为隐藏已知扩展名,请小心,检查属性以确保:正确的主机文件类型将显示为“文件”。
  • 您是否遵循了正确的语法? 您是否不小心在行前加上了表示#注释的井号 ( )?
  • 您是否已考虑了所有变体(www.example.com并且example.com最安全的方法就是添加两者)?

3. 空白

每行的格式是IP address,然后是水平制表符(转义码\t、ASCII HT、十六进制0x09)或单个空格(十六进制0x20),然后是主机名,即www.example.com,最后是回车符加换行符(转义码\r\n、ASCII CRLF、十六进制0x0d 0x0a)。

示例条目,使用 Unicode 控制图片来指示控制字符。(不要将这些内容复制并粘贴到您的 hosts 文件中!)

192.0.2.1␉www.example.com␍␊
2001:db8:8:4::2␉ipv6.example.com␍␊

各个字节可以查看记事本++十六进制编辑器插件。Notepad++ 还将显示特殊字符(查看 -> 显示符号),以便您可以轻松检查空格字符的数量和种类。

如果您从某处复制并粘贴了 hosts 条目,则可能会出现多个空格。理论上,hosts 支持将两列分隔开的多个空格,但如果没有其他方法,则需要尝试其他方法。

为了安全起见,请确保 hosts 文件中的所有行都使用制表符或空格,而不是同时使用两者。

最后,用一个空白行终止文件。

4. 注册表项

有一个注册表项指定 hosts 文件的位置。据说,Windows 实际上不支持将 hosts 文件放在其他位置,但您可能需要检查一下。该键是:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath

该条目应该是:

%SystemRoot%\System32\drivers\etc

或者,在命令提示符窗口中键入:

reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -v DataBasePath

将显示类似以下内容的内容:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
DataBasePath    REG_EXPAND_SZ    %SystemRoot%\System32\drivers\etc

5. 权限

有时文件权限、文件属性和类似内容存在问题。要使用默认权限重新创建文件:

  1. 在桌面上创建一个新的文本文件。
  2. 将当前主机文件的内容复制并粘贴到记事本中的此文件中。
  3. 保存新的文本文件并将其重命名为hosts
  4. 复制 (不要动) 将文件复制到您的%SystemRoot%\System32\drivers\etc目录,并覆盖旧文件。

最后一点很重要:复制有效,移动无效。

本地Users帐户必须能够读取 hosts 文件. 确认(在 Windows 7 中):

  1. 在 Windows 资源管理器中导航到%SystemRoot%\System32\drivers\etc
  2. 如果你看不到该hosts文件,确保您可以看到隐藏文件和系统文件
  3. 右键单击该hosts文件并Properties从上下文菜单中选择。
  4. hosts Properties窗口中,单击Security选项卡。
  5. 检查框中的名称列表Group or user names:。如果%COMPUTERNAME%\Users存在,请单击它以查看权限。
  6. 如果Users不存在,或者存在但没有Read权限,请单击Edit...
  7. 如果Users不存在,请单击Add...,键入Users,单击Check Names,然后单击“确定”或按 Enter。
  8. 选择Users,并确保栏位Read & execute已勾选Allow。点击 OK。如果Windows Security弹出警告框,选择Yes继续。
  9. 单击“确定”关闭hosts Properties窗口。
  10. 转到此答案的第 1 部分并按照说明检查它现在是否正常工作。

或者,在命令提示符窗口中键入:

icacls %SystemRoot%\System32\drivers\etc\hosts

应该显示类似以下内容的内容:

C:\WINDOWS\System32\drivers\etc\hosts NT AUTHORITY\SYSTEM:(F)
                                      NT AUTHORITY\SYSTEM:(I)(F)
                                      BUILTIN\Administrators:(I)(F)
                                      BUILTIN\Users:(I)(RX)
                                      APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
                                      APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

您应该会看到一个(R)之后BUILTIN\Users

6. 编码

hosts 文件应采用 ANSI 或 UTF-8(无 BOM)编码。您可以通过“文件”->“另存为”执行此操作。

7. 代理

如果您配置了代理,它可能会绕过 hosts 文件。解决方案是不使用代理,或将其配置为不执行此操作。

要检查,请转到 Internet Explorer -> Internet 选项 -> 连接 -> LAN 设置。如果所有内容均为空白,并且已选中“自动检测设置”,则表示您未使用代理。

如果您依赖代理访问网络,因此不想禁用它,您可以通过转到 Internet Explorer -> Internet 选项 -> 连接 -> LAN 设置 -> 代理服务器/高级来添加例外。然后将您的例外添加到例外文本框中。例如localhost;127.0.0.1;*.dev

8.DNS 地址

(这也可能解决代理问题。)

转到网络连接属性,然后转到 TCP/IP 设置,并将第一个 DNS 服务器更改为127.0.0.1(localhost)。第二个服务器可能应该是您实际 DNS 的 IP。

这对于 hosts 文件的工作来说不是必需的,但如果配置有些奇怪,它可能会对你有所帮助。

9. .local 地址

如果您使用 myhost.local 形式的 .local 域名条目并且它被忽略,请尝试以下操作:

x.x.x.x myhost.local www.myhost.local

即使www.myhost.local不存在。Windows 不知为何没有附加其工作组或本地域。

10. 行数/计数限制

(添加到这个答案中以使其可见,因为它已被提到过几次)

Windows hosts 文件似乎有行数或主机数限制。如果一行中有超过 150 个字符,或者 IP 的主机条目超过 8 个,请另起一行

例如而不是:

1.2.3.4 host1.com host2.com host3.com host4.com host5.com host6.com host7.com host8.com host9.com 

尝试这个:

1.2.3.4 host1.com host2.com host3.com host4.com host5.com
1.2.3.4 host6.com host7.com host8.com host9.com
 

答案2

确保您已先输入 ipaddress,然后再输入“域”,如下所示:

127.0.0.1   bo.dev
127.0.0.1   www.bo.dev

答案3

请添加检查文件权限。我发现,即使我对计算机以及主机具有本地管理员权限。直到我为主机文件添加了本地用户权限(具有读取和读取和执行权限),然后执行 ipconfig /flushdns,主机才变为活动状态。

答案4

我遇到了同样的问题,hosts 文件条目被忽略。我尝试了此帖子和许多其他帖子中的所有方法,但都没有成功。我想我会发布对我有用的方法,以防其他人遇到这种情况。

  1. 以管理员身份打开 Windows 资源管理器
  2. 删除 hosts 文件
  3. 以管理员身份打开记事本并创建一个新的 hosts 文件
  4. 从头开始并添加条目。
  5. 确保 hosts 文件没有 .txt 扩展名

注意:简单地打开 hosts 文件并删除内容,验证其大小为 0kb 并重新添加它不起作用。我怀疑该文件存在权限问题。

相关内容