主机文件被忽略,如何解决?


148

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

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

面对Windows忽略主机文件的问题时,可以遵循的综合故障排除协议是什么?


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

但是,这些倾向于处理特定情况,一旦发现OP犯了任何错误,讨论就结束了。如果您不是碰巧犯了同样的错误,那么这样的讨论不是很有用。因此,我认为拥有一个通用的协议来解决所有与主机有关的问题(涵盖所有情况)会更有用。


11
另外,就像其他人发布的一样,请勿使用“ nslookup”进行测试,因为该命令将忽略hosts文件。而是使用“ ping”。
LatinSuD 2014年

Answers:


220

根据我自己的经验以及谷歌搜索时遇到的情况,可以尝试以下操作:

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

对主机所做的更改应立即生效,但是Windows会缓存名称解析数据,因此一段时间以来可能会使用旧记录。打开命令行(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。如果是,则您的主机文件很好,问题出在其他地方。

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

nbtstat -R

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

ipconfig /displaydns | more

2.基础知识

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

3.空格

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

样本条目,使用Unicode控制图片指示控制字符。(请勿将它们复制并粘贴到您的主机文件中!)

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

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

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

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

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

4.注册表项

有一个注册表项,用于指定主机文件的位置。据说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帐户必须能够读取主机文件。确保(在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.编码

主机文件应使用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. .local地址

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

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

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


3
非常感谢您!我几乎要哭了,所以我们很多人开始为两行之间的空白条目而争抢SPACE。谢谢谢谢谢谢谢谢谢谢!!!!!

1
另一个陷阱是Windows的64位版本将32位应用程序(如Notepad ++)的System32文件夹重定向,因此当您保存文件时,它会显示在SystemWOW64文件夹而不是System32中。最好的解决方法是仅使用Windows版本的64位记事本。其次,如果您使用32位编辑器,则连接到管理共享(\\您的计算机名称\ c $ \ Windows \ System32 \ drivers \ etc)以打开文件。
蒂姆·刘易斯

4
好的帖子,但是有一些错误。1)如果您的网络确实提供了代理自动配置,则IE中的“自动检测设置” 可能会导致您(甚至不知不觉)使用代理。2)在网络设置中更改DNS服务器与如何/何时/是否使用hosts文件无关,将其更改为127.0.0.1实际上是错误,除非您实际上在自己的服务器上运行DNS服务器电脑。
Massimo 2014年

1
#5(创建一个新文件并复制它)对我有用。Win7的权限可能很有趣。
克里斯,

1
我使用vim在Cygwin下编辑了hosts文件,我认为这导致了我的hosts文件停止工作的问题。我必须创建一个新文件并复制以前的hosts文件的内容,然后对其进行修复。
forloop

16

确保先放置ipaddress,然后再放置“域”,如下所示:

127.0.0.1   bo.dev
127.0.0.1   www.bo.dev

6
我更喜欢使用一行:127.0.0.1 bo.dev www.bo.dev ftp.bo.dev
Xhynk 2014年

1
小心,Windows主机文件每行只允许输入9个或更少!这咬了我,花了一段时间才弄清楚。
安德鲁

不要在.dev本地使用TLD,以免发生冲突。它是Google拥有的有效的通用全球TLD,使用它会遇到很多问题。参见ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts
Patrick Mevzek

新秀错误,但它起作用。h!让他们取反名,然后取IP
赎金

11

请添加检查文件权限。我发现即使我对计算机具有本地管理员权限,也对主机具有本地管理员权限。直到我将本地用户添加到具有Read和Read&Execute的主机文件权限,然后再通过ipconfig / flushdns将主机激活。


3
就是这样!多年来,我一直对此问题感到困惑。我添加(machine)\USERS了“ 读取”和“ 读取和执行”权限,并且在ipconfig /flushdns此之后有效。非常感谢。我很高兴终于将我的主机文件退回。
克莱门特·切林

7

在我的情况下,我尝试了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中使用它。


1
来自support.microsoft.com/en-us/kb/309642/en-us,它很旧,因此可能不再准确:“ ICS使用Hosts.ics文件存储有关动态配置的客户端的信息。避免对以下内容进行更改这个文件是为了防止失去连接或数据。Hosts文件(不带文件扩展名)是向其中添加有关静态配置的客户端信息的文件。” 因此,我不希望Windows Hosts仅因为Hosts.ics存在而忽略该文件。其他原因可能导致Windows忽略您的Hosts文件,例如扩展名错误(但隐藏)。
Arjan 2015年

1
我看到此信息。但是我不知道,为什么我只能使host.ics编辑为主机才能工作。在编辑hosts.ics之前,我尝试了本主题中的所有方法,但是主机不起作用。
Unick 2015年

谢谢!你救了我的命。在Windows 10上工作
Xatenev

3

我遇到了同样的问题,主机文件条目被忽略。我没有碰运气就尝试过此线程以及其他许多线程中的所有操作。我想我会发布对我有用的东西,以防其他人遇到此问题。

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

注意:只需打开hosts文件并删除内容,确认它为0kb并重新添加就行了。我怀疑该文件存在权限问题。


快速说明-修改系统文件(例如hosts文件)时,请谨慎选择先创建备份。为了避免数据丢失,而不是考虑重新命名现有的hosts文件,喜欢hosts.bak,然后依照如您在步骤3中描述
nshiff

1

已经花了几个小时,也许是几天。

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

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

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

将mysite从受信任的站点列表中删除,它不再检查并“更正”我的主机文件转移。

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


1

确保您输入的值是IP NAME,而不是NAME IP

如果文件中只有一个条目,而您忽略了注释文本,则可能发生这种情况。


1

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


0

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


0

就我而言,问题是我正在从加密目录中复制主机文件,并以此覆盖etc / hosts。我必须查看属性,然后取消选中“加密文件”复选框。


0

在(Windows 7)便携式计算机上建立网络连接之前,将忽略我的主机文件。连接到网络后,一切都会按预期进行。显然,没有网络,我无法ping主机等。但我仍然希望Windows从hosts文件中获取其IP地址。没有。即使断开连接后,它仍然可以查找地址,但是在重新启动计算机与首次连接到网络之间,它会忽略主机文件。

(顺便说一下,据我所知,制表符,空格和无回车符都无关紧要)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.