Windows 计算机上的主机文件用于将某些名称字符串绑定到特定 IP 地址以覆盖其他名称解析方法。
通常,人们决定更改主机文件,并发现更改拒绝生效,或者此后甚至忽略主机文件的旧条目。许多“陷阱”错误都可能导致这种情况,要弄清楚是哪个错误可能会令人沮丧。
当面对Windows忽略hosts文件的问题时,可能遵循的综合故障排除协议是什么?
这个问题在 SO 上有重复,例如HOSTS 文件被忽略
但是,这些往往是针对特定情况的,一旦发现 OP 犯的任何错误,讨论就结束了。如果你没有碰巧犯过同样的错误,这样的讨论就不是很有用了。因此,我认为拥有一个通用协议来解决所有与主机相关的问题并涵盖所有情况会更有帮助。
Sup*_*est 264
根据我自己的经验和我在谷歌搜索时遇到的情况,这里有一些可以尝试的事情:
对主机的更改应立即生效,但 Windows 会缓存名称解析数据,因此可能会在一段时间内使用旧记录。打开命令行(Windows+R, cmd, Enter)并输入:
ipconfig /flushdns
Run Code Online (Sandbox Code Playgroud)
删除旧数据。要检查它是否有效,请使用(假设您的主机中有www.example.com的 ipv4 条目,或 ipv6.example.com 的主机中有 ipv6 条目):
ping www.example.com -n 1
ping -6 ipv6.example.com -n 1
Run Code Online (Sandbox Code Playgroud)
并查看它是否使用了正确的 IP。如果是,则您的主机文件没问题,问题出在其他地方。
此外,您可以使用以下命令重置 NetBios 缓存(以管理员身份打开控制台,否则它将失败):
nbtstat -R
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令检查 DNS 缓存中的当前数据:
ipconfig /displaydns | more
Run Code Online (Sandbox Code Playgroud)
注意:nslookup不查看主机文件。见NSLOOKUP 和 NBLOOKUP 给出一个 IP 地址;PING 找到另一个
hosts,不是host,等等。hosts不是hosts.txt) - 如果您将窗口配置为隐藏已知扩展名,请小心,检查属性以确保:正确的主机文件类型将仅显示为“文件”。#表示注释的哈希 ( )?www.example.com并且example.com- 最安全的是将两者都添加)?每行的格式是IP address,然后是水平制表符(转义码\t、ASCII HT、十六进制0x09)或单个空格(十六进制0x20),然后是主机名,即。www.example.com,然后最后一个回车,然后是换行,(转义码\r\n,ASCII CRLF,十六进制0x0d 0x0a)。
示例条目,使用 Unicode 控制图片来表示控制字符。(不要将这些复制并粘贴到您的主机文件中!)
192.0.2.1?www.example.com??
2001:db8:8:4::2?ipv6.example.com??
Run Code Online (Sandbox Code Playgroud)
可以在Notepad++ 中使用十六进制编辑器插件查看单个字节。Notepad++ 还将显示特殊字符(查看 -> 显示符号),因此您可以轻松检查空白字符的数量和种类。
如果您从某处复制并粘贴了主机条目,则最终可能会出现多个空格。理论上,hosts 支持分隔两列的多个空格,但是如果没有其他方法可以尝试,那就是另一回事了。
为了安全起见,请确保主机文件中的所有行都使用制表符或空格,而不是两者都使用。
最后,用空行终止文件。
有一个注册表项指定主机文件的位置。据说,Windows 实际上并不支持将主机文件放在其他位置,但您可能需要检查一下。关键是:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath
Run Code Online (Sandbox Code Playgroud)
条目应该是:
%SystemRoot%\System32\drivers\etc
Run Code Online (Sandbox Code Playgroud)
有时文件的权限、文件属性和类似的东西会出现问题。要使用默认权限重新创建文件:
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窗口。主机文件应以 ANSI 或 UTF-8 编码,不带 BOM。您可以使用文件 -> 另存为来执行此操作。
如果您配置了代理,它可能会绕过主机文件。解决方案是不使用代理,或将其配置为不执行此操作。
要检查,请转到 Internet Explorer -> Internet 选项 -> 连接 -> LAN 设置。如果一切都为空并且“自动检测设置”被选中,则您没有使用代理。
如果您依靠代理访问 Web 并且因此不想禁用它,您可以通过转至 Internet Explorer -> Internet 选项 -> 连接 -> LAN 设置 -> 代理服务器/高级来添加例外。然后将您的例外添加到例外文本框中。例如localhost;127.0.0.1;*.dev
(这也可以解决代理问题。)
转到您的网络连接属性,然后是 TCP/IP 设置,并将第一个 DNS 服务器更改为127.0.0.1(localhost)。第二个应该是您实际的 DNS 的 IP。
这对于主机文件的工作来说不是必需的,但如果某些东西配置很奇怪,它可能对您有所帮助。
如果您使用 myhost.local 形式的 .local 域条目并且它被忽略,请尝试以下操作:
x.x.x.x myhost.local www.myhost.local
Run Code Online (Sandbox Code Playgroud)
即使www.myhost.local不存在。Windows 以某种方式不附加其工作组或本地域。
(添加到此答案中以使其可见,因为它已被多次提及)
Windows 主机文件似乎有行或主机限制。如果一行中有 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
Run Code Online (Sandbox Code Playgroud)
尝试这个:
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
Run Code Online (Sandbox Code Playgroud)
小智 18
确保您先输入 ipaddress,然后再输入“域”,如下所示:
127.0.0.1 bo.dev
127.0.0.1 www.bo.dev
Run Code Online (Sandbox Code Playgroud)
小智 13
请添加检查文件权限。我发现即使我对计算机和主机具有本地管理员权限。直到我使用 Read 和 Read & Execute 将本地用户添加到主机文件权限,然后 ipconfig /flushdns 主机才变为活动状态。
小智 10
在我的情况下,我尝试了 Windows 7 创建的文件:C:\Windows\System32\drivers\etc\hosts.ics。
主机.ics:
# This file has been automatically generated for use by Microsoft Internet
# Connection Sharing. It contains the mappings of IP addresses to host names
# for the home network. Please do not make changes to the HOSTS.ICS file.
# Any changes may result in a loss of connectivity between machines on the
# local network.
Run Code Online (Sandbox Code Playgroud)
因此,Windows 会忽略 C:\Windows\System32\drivers\etc\hosts 中的设置并使用 hosts.ics 中的设置。
| 归档时间: |
|
| 查看次数: |
454368 次 |
| 最近记录: |