不知大家是否遇到过Hosts文件失效的问题 。 原本我的Windows 8.1系统的Hosts文件可以正常使用 , 但是最近不知何故突然失效了 。 Hosts文件失效给我工作带来很多麻烦 , 为了分析具体原因 , 我给大家做个演示测试 。

文章插图
可见hosts文件路径是对的 , 而且只有一行映射 , 确保没有其他的干扰项 。

文章插图
使用ipconfig /flushdns清理DNS缓存 , 而且其实我还停止了DNS Client服务的 。 然后继续ping , 依然返回的是真实DNS解析的地址 。

文章插图
如图 , 可见system的权限也是有分配的 。 下面那个我自己的账户和Admin组的账户的权限也是完全控制的 。
情况就是这样 , 不知为何最近突然失效了 。 我可能是遇到什么劫持了么?
分析处理
根据引用中我的猜想 , 我使用了消息记录器来跟踪与hosts文件有关的系统消息 。 为了对比 , 我同时在windows 8.1和虚拟机中运行的windows XP下操作 , 以便作为对比 。
首先我发现其实所有有网络通信功能的程序都会去检测HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDnscacheParameters这个键下面是否存在UseHostsFile值是否存在 , 数据是多少 。 但是我发现无论XP还是8.1都没有该值 , 但是根据之前的实验可知是XP可以正常读取hosts文件的 , 所以可以断定这个是无关项 。 (不过根据这个判断 , 原来Dnscache服务(也就是在服务中显示名称为DNS Client的服务 , 用于缓存DNS解析的结果)是可以手动强制不读取hosts文件的 , 修改这个键值即可)
然后我发现一个怪异的现象 , 每次我手动修改hosts文件后 , 在8.1下会显示出一个名为svchost.exe的进程试图访问hosts文件但是结果为Acces Denied 。 在XP下 , 也有同样名称的进程试图访问hosts文件但是结果却是Success的 。
【竞争失效现象 Win8.1系统Hosts文件失效的现象及解决方法】 根据消息记录器提供的进程的PID , 追踪到其承载的服务中有一个共同的服务就是DNS Client 。 于是可以断定肯定是上述提到的DNS Client服务出现问题了 。 因为出现访问文件被拒 , 肯定是帐户问题 , 于是我习惯性地打开DNS Client的属性页 , 转到登录选项卡 , 发现其使用的帐户不是默认本地系统帐户 , 而是名为“Network Service”的内置安全主体 。
到此一切都明了了 , 归根到底还是权限问题 。 DNS Client服务使用的帐户不是system , 而是Network Service 。 虽然我给system帐户赋予了完全的访问控制 , 但是根据我开篇的截图可以发现 , 我里面缺少了Network Service的安全主体 。 而现在我们可以断定system帐户和Network Service安全主体是没有关联的 , 所以才导致了DNS Client服务启动后无法正常读取hosts文件 , 而导致hosts文件无效 。
解决办法就是:编辑etc文件夹的访问权限 , 添加Network Service安全主体并赋予至少允许读取的权限 , 然后重新启动DNS Client服务即可 。 目前我的hosts已经一切正常 。
通过以上的分析 , 相信大家能够更清楚地理解Windows 8.1系统下Hosts文件失效的原因 , 也能够掌握解决它的应对措施 。 最终 , 我们的Hosts文件可以恢复正常 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
