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

Windows计算机上的主机文件用于将某些名称string绑定到特定的IP地址以覆盖其他名称parsing方法。

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

当面对Windows忽略主机文件的问题时,可能会遵循的全面的故障诊断协议是什么?


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

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

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

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

对主机的更改应立即生效,但Windows会caching名称parsing数据,因此可能会使用旧logging一段时间。 打开命令行(Windows + R, cmd ,Enter)并键入:

 ipconfig /flushdns 

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

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

看看它是否使用正确的IP。 如果是的话,你的主机文件是好的,问题在别处。

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

 nbtstat -R 

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

 ipconfig /displaydns | more 

2.基础知识

  • 您的主机文件是否正确命名? 它应该是hosts而不是host
  • 扩展名是否正确? 它应该没有扩展名( hosts不是hosts.txt ) – 要小心如果你已经configuration了窗口来隐藏已知的扩展名,请检查属性以确保:正确的hosts文件的types将显示为“文件”。
  • 你有没有遵循正确的语法 ? 您是否意外地在表示注释的散列( # )前面添加行号?
  • 你有没有照顾所有变种( www.example.comexample.com – 最安全的只是添加两个)?

3.空白

每行的格式是IP address ,然后是水平制表符(转义码\t ,ASCII HT ,hex0x09 )或单个空格(hex0x20 ),然后是主机名,即。 www.example.com ,然后是一个回车符,然后是换行符,(转义码\r\n ,ASCII CRLF ,hex0x0d 0x0a )。

示例条目,使用Unicode控制图片来指示控制字符。 (不要复制和粘贴到你的主机文件!)

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

单个字节可以在Notepad ++中用hex编辑器插件查看 。 记事本++还将显示特殊字符(查看 – >显示符号),以便您可以轻松检查空格字符的数量和种类。

如果您从某处复制并粘贴主机条目,则最终可能会有多个空格。 理论上,主机支持将两列分开的多个空格,但如果没有其他的工作,则是另一回事。

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

最后,以空行结束文件。

4.registry项

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

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

入口应该是:

 %SystemRoot%\System32\drivers\etc 

5.权限

有时文件的权限问题,文件属性和类似的问题。 使用默认权限重新创build文件:

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

最后一点很重要:复制作品,移动不。

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

  1. 在Windows资源pipe理器中导航到%SystemRoot%\System32\drivers\etc
  2. 如果看不到hosts文件,请确保您可以看到隐藏文件和系统文件 。
  3. 右键单击hosts文件,然后从上下文菜单中select“ Properties ”。
  4. hosts Properties窗口中,单击Security选项卡。
  5. 检查Group or user names:框中的名称列表。 如果%COMPUTERNAME%\Users存在,请点击它查看权限。
  6. 如果Users不存在或者存在但没有Read权限,请单击Edit...
  7. 如果Users不存在,请单击Add... ,键入Users ,单击Check Names ,然后单击确定或按Enter键。
  8. selectUsers ,并确保在Allow列中选中Read & execute 。 点击OK。 如果popupWindows Security警报框,请selectYes继续。
  9. 单击确定closureshosts Properties窗口。
  10. 去这个答案的第1部分,并按照指示,以检查它是否现在正在工作。

6.编码

主机文件应该在没有BOM的情况下以ANSI或UTF-8编码。 你可以使用文件 – >另存为来做到这一点。

7.代理

如果您configuration了代理,则可能会绕过hosts文件。 解决scheme是不使用代理,或configuration它不这样做。

要检查,请转到您的Internet Explorer – > Internet选项 – >连接 – > LAN设置。 如果一切都为空,并且选中“自动检测设置”,则说明您没有使用代理服务器。

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

8. DNS地址

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

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

这对主机文件不起作用是必要的 ,但是如果奇怪地configuration了某些东西,可能会对您的情况有所帮助。

9.。本地地址

如果您以myhost.local的forms使用.local域条目并将其忽略,请尝试以下操作

 xxxx myhost.local www.myhost.local 

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

确保你已经把ipaddress第一个,然后像这样的“域”:

 127.0.0.1 bo.dev 127.0.0.1 www.bo.dev 

请添加检查文件的权限。 我发现,即使我有本地pipe理员权限的计算机,从而主机。 直到我使用Read和Read&Execute将本地用户添加到hosts文件权限,然后是ipconfig / flushdns主机变为活动状态。

在我的情况下,我尝试了Windows 7创build的文件: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中使用它。

花了几个小时,可能几天在这个。

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

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

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

采取受信任的网站列表mysite,它不再检查和“纠正”我的主机文件转移。

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

在上面的讨论中错过的一个问题是hosts文件中的非限定名称。 您的networking设置可能会在这一点上启动,并自动将您自己的域名添加到不合格域名的末尾。 因此,这个名字可能无法解决,或者更糟的是,解决一个完全不同的机器。

我遇到同样的问题,主机文件条目被忽略。 我尝试了这个和其他许multithreading没有运气的一切。 我想我会发布什么工作,以防其他人遇到这种情况。

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

注意:只要打开主机文件并删除内容,validation它是0kb,重新添加它不起作用。 我怀疑该文件的权限问题。

在Windows中,确保HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ DataBasePath指向hosts文件的目录。

在我的情况下,问题是我从一个encryption的目录复制一个主机文件,并用这个覆盖了etc / hosts。 我不得不看看属性,并取消选中“encryption文件”checkbox。

确保您input的值是IP NAME ,而不是NAME IP

如果文件中只有一个条目,并且忽略了注释文本,就会发生这种情况。