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


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

通常,人们决定更改hosts文件,并发现更改拒绝生效,或者之后甚至忽略hosts文件的旧条目。一些“陷阱”错误可能导致这种情况,弄清楚哪一个可能会令人沮丧。

当遇到Windows忽略主机文件的问题时,可能遵循的综合故障排除协议是什么?


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

然而,这些往往会处理一个特定的案例,一旦OP发现任何错误,讨论就结束了。如果你碰巧没有犯同样的错误,那么这样的讨论就不是很有用了。所以我认为有一个通用协议来解决所有与主机相关的问题会更有帮助 所有 案例。


121
2017-11-26 16:28




此外,如有人在其他地方发布,请不要使用“nslookup”来测试它,因为该命令会忽略hosts文件。而是使用“ping”。 - LatinSuD


答案:


根据我自己的经验和我在谷歌搜索时遇到的情况,这里有一些尝试:

你检查它是否正常工作了吗?

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

ipconfig /flushdns

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

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

并查看它是否使用了正确的IP。如果是,您的主机文件很好,问题出在其他地方。

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

nbtstat -R

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

ipconfig /displaydns | more

2.基础知识

  • 您的主机文件是否正确命名?它应该是 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文件中的所有行都使用制表符或空格,而不是两者。

最后,使用空行终止文件。

4.注册表项

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

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

条目应该是:

%SystemRoot%\System32\drivers\etc

5.权限

有时,文件的权限,文件属性和类似的事情都存在问题。要使用默认权限重新创建文件:

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

最后一点很重要:复制工作,移动没有。

本地的 Users 帐户 必须能够读取hosts文件。要确保(在Windows 7中):

  1. 导航 %SystemRoot%\System32\drivers\etc 在Windows资源管理器中
  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 柱。单击确定。如果一个 Windows Security 警告框弹出,选择 Yes 接着说。
  9. 单击“确定”关闭 hosts Properties 窗口。
  10. 转到本答案的第1部分,按照说明检查它是否正常工作。

6.编码

hosts文件应使用ANSI或UTF-8编码,无需BOM。您可以使用文件 - >另存为来执行此操作。

7.代理人

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

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

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

8. DNS地址

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

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

这不是hosts文件工作所必需的,但如果某些内容配置奇怪,它可能对您的情况有所帮助。

9.。本地地址

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

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

即使www.myhost.local不存在。 Windows以某种方式不附加其工作组或localdomain。


184
2017-11-26 16:28



非常感谢你!我几乎哭了,所以我们很多人因为两条线之间的空白入口而开始疯狂。谢谢谢谢谢谢谢谢谢谢谢谢!!!!!
另一个问题是,64位版本的Windows重定向32位应用程序(如Notepad ++)的System32文件夹,因此当您保存文件时,将显示在SystemWOW64文件夹而不是System32中。最好的解决方法是使用64位的Windows版记事本。如果使用32位编辑器,则最好连接到管理共享(\\ yourmachinename \ c $ \ Windows \ System32 \ drivers \ etc)以打开文件。 - Tim Lewis
好帖子,但有几个错误。 1)IE中的“自动检测设置” 能够 如果您的网络确实提供代理自动配置,则引导您(甚至不知情)使用代理。 2)在网络设置中更改DNS服务器与如何/何时/如果有无关 hosts 使用文件,并将其更改为127.0.0.1实际上是一个错误,除非您实际上在您的计算机上运行DNS服务器。 - Massimo
#5(创建一个新文件并复制它)为我做了诀窍。 Win7可以很有趣的权限。 - chris
我使用vim编辑了Cygwin下的hosts文件,我认为这导致我的hosts文件的问题停止工作。我不得不创建一个新文件并复制以前的hosts文件的内容并修复它。 - forloop


确保你已经把ipaddress放在第一位,然后是“域”,如下所示:

127.0.0.1   bo.dev
127.0.0.1   www.bo.dev

13
2018-06-04 12:20



我更喜欢使用一行: 127.0.0.1 bo.dev www.bo.dev ftp.bo.dev - Xhynk
小心,windows hosts文件只允许每行NINE OR LESS条目!这让我感到困惑,并花了一段时间才弄明白。 - andrew
不要使用 .dev TLD在本地认为您不会发生碰撞。它是Google拥有的有效通用全球TLD,使用它会遇到很多问题。看到 ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts - Patrick Mevzek


请添加检查文件权限。 我发现即使我对计算机有本地管理员权限,因此对主机也有权限。 直到我使用Read和Read&Execute以及ipconfig / flushdns将本地用户添加到hosts文件权限 主机变得活跃。


10
2017-10-09 23:29



就是这样!我一直对这个问题感到困惑 年份。我补充道 (machine)\USERS 同 读 和 阅读并执行 权限和之后 ipconfig /flushdns 有效。非常感谢。我很高兴终于让我的主机文件回来了。 - Clement Cherlin


在我的情况下,我尝试了Windows 7创建的文件:C:\ Windows \ System32 \ drivers \ etc \ hosts.ics。

hosts.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.

因此,Windows忽略C:\ Windows \ System32 \ drivers \ etc \ hosts中的设置,并从hosts.ics中使用它。


4
2017-09-24 20:56



从 support.microsoft.com/en-us/kb/309642/en-us,这是旧的所以可能不再准确: “ICS使用Hosts.ics文件存储有关动态配置的客户端的信息。避免更改此文件以防止连接或数据丢失.Hosts文件(没有文件扩展名)是您添加的文件有关静态配置客户端的信息。“ 所以,我不希望Windows忽略它 Hosts 文件只是因为 Hosts.ics 存在。其他可能导致Windows忽略您的Hosts文件,例如可能是错误的(但隐藏的)扩展名。 - Arjan
我看到了这个信息。但我不知道,为什么我只能编辑hosts.ics才能使主机工作。在编辑hosts.ics之前,我尝试了本主题中的所有方法,但是主机不起作用。 - Unick


我遇到了同样的问题,托管文件条目被忽略。我在这个和许多其他线程中尝试了一切没有运气。我想我会发布对我有用的东西以防其他人碰到这个。

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

注意:只需打开hosts文件并删除内容,验证它是0kb并重新添加它不起作用。我怀疑该文件存在权限问题。


2
2018-02-18 00:05





已经花了好几个小时,可能还有几天。

IBM Trusteer Endpoint Rapport安全性可能会导致此问题。

我已将mysite.com添加到其可信站点列表中。

我认为,作为其安全性的一部分,它可以防止恶意软件或病毒将您转移到其他站点。

对可信站点列表进行了抨击,它不再检查并“纠正”我的主机文件转移。

希望能帮助有人解决他们的问题。


1
2018-02-16 21:00





上面讨论中遗漏的一个问题是hosts文件中的不合格名称(不包括句点的名称)。您的网络设置可能会在此时启动,并自动将您自己的域添加到不合格域的末尾。因此,名称可能无法解决,或者更糟糕的是,解析为完全不同的机器。


1
2018-05-06 07:20