Windows 计算机上的主机文件用于将某些名称字符串绑定到特定的 IP 地址以覆盖其他名称解析方法。
通常,决定更改 hosts 文件,然后发现更改拒绝生效,或者此后甚至忽略 hosts 文件的旧条目。许多“陷阱”错误都可能导致这种情况,弄清楚是哪一个可能会令人沮丧。
当遇到 Windows 忽略主机文件的问题时,可以遵循的综合故障排除协议是什么?
这个问题在SO上有重复,比如HOSTS file being ignored
然而,这些往往是针对特定案例的,一旦发现 OP 所犯的任何错误,讨论就结束了。如果您没有碰巧犯过同样的错误,那么这样的讨论就没有多大用处。因此,我认为拥有一个解决所有与主机相关的问题并涵盖所有情况的通用协议会更有帮助。
根据我自己的经验和我在谷歌搜索时遇到的情况,这里有一些尝试:
1、你检查过它是否正常工作?
对主机的更改应立即生效,但 Windows 会缓存名称解析数据,因此在一段时间内可能会使用旧记录。打开命令行(Windows+R、
cmd
、Enter)并输入:删除旧数据。要检查它是否有效,请使用(假设您的主机中有www.example.com的 ipv4 条目,或 ipv6.example.com 的主机中的 ipv6 条目):
并查看它是否使用了正确的 IP。如果是,则您的 hosts 文件没有问题,问题出在其他地方。
此外,您可以重置 NetBios 缓存(以管理员身份打开控制台,否则将失败):
您可以使用以下命令检查 DNS 缓存中的当前数据:
注意:
nslookup
不查看主机文件。看NSLOOKUP和NBLOOKUP给一个IP地址;PING 找到另一个2. 基础知识
hosts
而不是host
,等等。hosts
不是hosts.txt
) - 如果您已将窗口配置为隐藏已知扩展名,请小心,检查属性以确保:正确的主机文件类型将显示为“文件”。#
表示注释的井号 ( )?www.example.com
并且example.com
-最安全的是同时添加两者)?3.空白
每行的格式是
IP address
,然后是水平制表符(转义码\t
、ASCIIHT
、十六进制0x09
)或单个空格(十六进制0x20
),然后是主机名,即。www.example.com
,最后是回车符和换行符(转义码\r\n
、ASCIICRLF
、十六进制0x0d 0x0a
)。示例条目,使用 Unicode 控制图片来指示控制字符。(不要将它们复制并粘贴到您的主机文件中!)
可以使用十六进制编辑器插件在Notepad++中查看各个字节。Notepad++ 还将显示特殊字符(查看 -> 显示符号),因此您可以轻松检查空白字符的数量和种类。
如果您从某处复制并粘贴主机条目,您可能会得到多个空格。理论上 hosts 支持分隔两列的多个空格,但如果没有其他方法可以尝试是另一回事。
为了安全起见,请确保主机文件中的所有行都使用制表符或空格,而不是两者。
最后,用一个空行终止文件。
4.注册表项
有一个注册表项指定主机文件的位置。据推测,Windows 实际上并不支持将主机文件放在其他位置,但您可能需要检查一下。关键是:
该条目应为:
或者,在命令提示符窗口中,键入:
它应该显示类似于:
5.权限
有时文件权限、文件属性和类似问题存在问题。要使用默认权限重新创建文件:
hosts
.%SystemRoot%\System32\drivers\etc
目录,并覆盖旧文件。最后一点很重要:复制有效,移动无效。
本地
Users
帐户必须能够读取主机文件。确保(在 Windows 7 中):%SystemRoot%\System32\drivers\etc
在 Windows 资源管理器中导航到。hosts
文件,请确保您可以看到隐藏文件和系统文件。hosts
文件并Properties
从上下文菜单中选择。hosts Properties
窗口中,单击Security
选项卡。Group or user names:
。如果%COMPUTERNAME%\Users
存在,请单击它以查看权限。Users
不存在,或存在但没有Read
权限,请单击Edit...
。Users
不存在,请单击Add...
,键入Users
,单击Check Names
,然后单击确定或按 Enter。Users
,并确保Read & execute
在Allow
列中选中。单击确定。如果Windows Security
弹出警告框,请选择Yes
继续。hosts Properties
窗口。或者,在命令提示符窗口中,键入:
它应该显示如下内容:
你应该看到一个
(R)
afterBUILTIN\Users
。6.编码
hosts 文件应该以 ANSI 或 UTF-8 编码,不带 BOM。您可以使用文件 -> 另存为来执行此操作。
7.代理
如果您配置了代理,它可能会绕过主机文件。解决方案是不使用代理,或将其配置为不执行此操作。
要检查,请转至您的 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. 本地地址
如果您使用的是 myhost.local 形式的 .local 域条目并且它被忽略,请尝试以下操作:
即使www.myhost.local不存在。Windows 不知何故不会附加其工作组或本地域。
10.行/计数限制
(添加到此答案以使其可见,因为它已被多次提及)
Windows 主机文件似乎有行或主机限制。如果一行中的字符超过 150 个或 IP 的主机条目超过 8 个,则新建一行
例如,而不是:
尝试这个:
确保先输入 IP 地址,然后再输入“域”,如下所示:
请添加检查文件权限。我发现即使我拥有计算机和主机的本地管理员权限。直到我使用 Read 和 Read & Execute 将本地用户添加到主机文件权限,然后 ipconfig /flushdns 主机才变为活动状态。
在我的案例中,我尝试了 Windows 7 创建的文件:C:\Windows\System32\drivers\etc\hosts.ics。
主机.ics:
因此,Windows 会忽略 C:\Windows\System32\drivers\etc\hosts 中的设置并使用 hosts.ics 中的设置。
我遇到了同样的问题,主机文件条目被忽略。我尝试了这个和许多其他线程中的所有内容,但没有成功。我想我会发布对我有用的内容,以防其他人遇到这个问题。
注意:单纯打开hosts文件删除内容,验证为0kb再重新添加是不行的。我怀疑该文件存在权限问题。
花了几个小时,可能几天。
IBM Trusteer Endpoint Rapport 安全性可能会导致此问题。
我已将 mysite.com 添加到其受信任站点列表中。
我认为作为其安全性的一部分,它可以防止恶意软件或病毒将您转移到其他站点。
将 mysite 从受信任站点列表中取出,它不再检查和“更正”我的主机文件转移。
希望能帮助某人解决他们的问题。
上面讨论中遗漏的一个问题是主机文件中的非限定名称(不包含句点的名称)。您的网络设置可能会在此时启动并自动将您自己的域添加到不合格域的末尾。因此,该名称可能无法解析,或者更糟的是,解析为完全不同的机器。
确保您输入的值是
IP NAME
,而不是NAME IP
。如果文件中只有一个条目,并且当您忽略注释文本时,就会发生这种情况。
在 Windows 中,确保 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath 指向主机文件的目录。
就我而言,问题是我从加密目录复制主机文件并用它覆盖 etc/hosts。我不得不查看属性并取消选中“加密文件”复选框。