Windows计算机上的hosts文件用于将某些名称字符串绑定到特定的IP地址,以覆盖其他名称解析方法。
通常,人们决定更改hosts文件,并发现更改拒绝生效,或者之后甚至忽略hosts文件的旧条目。一些“陷阱”错误可能导致这种情况,弄清楚哪一个可能会令人沮丧。
当遇到Windows忽略主机文件的问题时,可能遵循的综合故障排除协议是什么?
这个问题在SO上有重复,例如 HOSTS文件被忽略
然而,这些往往会处理一个特定的案例,一旦OP发现任何错误,讨论就结束了。如果你碰巧没有犯同样的错误,那么这样的讨论就不是很有用了。所以我认为有一个通用协议来解决所有与主机相关的问题会更有帮助 所有 案例。
根据我自己的经验和我在谷歌搜索时遇到的情况,这里有一些尝试:
你检查它是否正常工作了吗?
对主机的更改应立即生效,但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.权限
有时,文件的权限,文件属性和类似的事情都存在问题。要使用默认权限重新创建文件:
- 在桌面上创建一个新的文本文件。
- 将当前主机文件的内容复制并粘贴到记事本中的此文件中。
- 保存新文本文件并将其重命名为
hosts
。
- 复制(别动)文件到你的
%SystemRoot%\System32\drivers\etc
目录,并覆盖旧文件。
最后一点很重要:复制工作,移动没有。
本地的 Users
帐户 必须能够读取hosts文件。要确保(在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
窗口。
- 转到本答案的第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。
确保你已经把ipaddress放在第一位,然后是“域”,如下所示:
127.0.0.1 bo.dev
127.0.0.1 www.bo.dev
请添加检查文件权限。
我发现即使我对计算机有本地管理员权限,因此对主机也有权限。
直到我使用Read和Read&Execute以及ipconfig / flushdns将本地用户添加到hosts文件权限
主机变得活跃。
在我的情况下,我尝试了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中使用它。
我遇到了同样的问题,托管文件条目被忽略。我在这个和许多其他线程中尝试了一切没有运气。我想我会发布对我有用的东西以防其他人碰到这个。
- 以管理员身份打开Windows Explorer
- 删除hosts文件
- 以管理员身份打开记事本并创建新的主机文件
- 从头开始并添加条目。
- 确保hosts文件没有.txt扩展名
注意:只需打开hosts文件并删除内容,验证它是0kb并重新添加它不起作用。我怀疑该文件存在权限问题。
已经花了好几个小时,可能还有几天。
IBM Trusteer Endpoint Rapport安全性可能会导致此问题。
我已将mysite.com添加到其可信站点列表中。
我认为,作为其安全性的一部分,它可以防止恶意软件或病毒将您转移到其他站点。
对可信站点列表进行了抨击,它不再检查并“纠正”我的主机文件转移。
希望能帮助有人解决他们的问题。
上面讨论中遗漏的一个问题是hosts文件中的不合格名称(不包括句点的名称)。您的网络设置可能会在此时启动,并自动将您自己的域添加到不合格域的末尾。因此,名称可能无法解决,或者更糟糕的是,解析为完全不同的机器。