您现在的位置: 365建站网 > 365文章 > hosts 异常怎么修复上网?位置语法、缓存刷新与重置步骤

hosts 异常怎么修复上网?位置语法、缓存刷新与重置步骤

文章来源:365jz.com 点击数:10 更新时间:2024-08-05 22:58

hosts 文件是 Windows/Linux 上最古老也最容易被改坏的配置文件:它让本地优先解析域名,绕过 DNS。上不了网、某些网站被跳转、内部系统访问失败,很多时候一行 hosts 就能解决;同样,hosts 被恶意篡改也会导致成片网站打不开。本文按“位置 → 语法 → 常见问题 → 修复”整理。

hosts 文件位置语法与修复

一、位置与权限

  • Windows:C:\Windows\System32\drivers\etc\hosts(没有扩展名);64 位系统同路径,SysWOW64\drivers\etc 下没有 hosts;
  • Linux/macOS:/etc/hosts;
  • Android:/system/etc/hosts(需 root),部分机型在 /data/etc/hosts;
  • 编辑必须以管理员身份打开编辑器(记事本右键“以管理员身份运行”再打开文件),否则保存时报“拒绝访问”;
  • hosts 文件每行一条,格式为 IP 域名,中间用空格或 Tab 分隔,支持一行多个域名?不支持,一个 IP 对应一行一个域名最稳妥。
# 正确示例
127.0.0.1      localhost
::1            localhost
10.0.1.20      intranet.corp.local
0.0.0.0        ads.example.com      # 屏蔽广告域名(IPv4)
127.0.0.1      test.local api.test.local   # 部分系统可空格分隔多域名,但建议拆行

二、解析优先级(决定它为什么能生效)

Windows 的名称解析顺序由 apiset 与 DNS Client 决定,一般理解是:本地 hosts → DNS 缓存 → DNS 服务器 → NetBIOS/LMHOSTS。所以 hosts 能覆盖 DNS 结果。三个重要细节:

  • 浏览器有独立缓存:改完 hosts 后,Chrome/Edge 仍可能用内置 DNS 缓存。清法:访问 chrome://net-internals/#dns 点 “Clear host cache”,或直接重启浏览器;
  • 系统 DNS 缓存:管理员命令行执行 ipconfig /flushdns(Windows)、sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder(macOS)、Linux 看服务:resolvectl flush-caches 或 systemctl restart nscwd;
  • 验证是否生效:ping 域名 看返回 IP;更准的是 nslookup 域名(部分解析器顺序不同)与 PowerShell 的 Resolve-DnsName 域名。

三、hosts 异常的常见表现

1. 某些网站打不开,但别人能开:hosts 里被加了 0.0.0.0 或 127.0.0.1 的屏蔽行(广告拦截工具或恶意程序)。

2. 上网被跳转到陌生站点:hosts 被恶意改写,把搜索引擎/银行域名指向攻击者 IP。典型特征是行尾有大量重复条目或乱码路径。

3. 改完没反应:多为缓存(见上),或 文件被只读/被占用(安全软件的“hosts 防护”会拒绝写入,需临时关闭)。

4. 保存后变成 hosts.txt 或 hosts.1:记事本另存为时加了 .txt 扩展名(隐藏扩展名时极易发生)。修复:cmd 里 ren hosts.txt hosts。

5. 有 IPv6 的站点解析异常:hosts 只写了 IPv4,而系统优先用 AAAA;此时应同时补 ::1 或正确的 IPv6 记录。

6. hosts 权限被改坏,报“拒绝访问”且管理员也打不开:属主被换。用命令恢复:

takeown /f C:\Windows\System32\drivers\etc\hosts
icacls C:\Windows\System32\drivers\etc\hosts /grant administrators:F
icacls C:\Windows\System32\drivers\etc\hosts /reset

四、修复与恢复出厂的三种做法

做法 A:清空重写(推荐,最彻底)
用管理员身份新建 fix.bat:

@echo off
set H=%WINDIR%\System32\drivers\etc\hosts
attrib -r -s -h %H%
echo 127.0.0.1       localhost>%H%
echo ::1             localhost>>%H%
ipconfig /flushdns
echo hosts 已重置

运行前建议先备份:copy %H% %H%.bak。Windows 自带一个样板文件,位于 %WINDIR%\System32\drivers\etc\hosts.sam(部分版本),或直接按上面两行手写即可。

做法 B:用系统还原/安全模式
怀疑是恶意程序持续改回时:msconfig 里禁用全部启动项,进安全模式再改;或用 Autoruns(微软 Sysinternals 工具)找是哪个进程在写 hosts。

做法 C:整体检查相关项
hosts 出错常常只是表象,顺手把这几处一起查:

  1. 网卡 DNS 是否被改成可疑地址:控制面板 → 网络和共享中心 → 更改适配器设置 → 属性 → IPv4 → 属性(自动获取或 223.5.5.5/119.29.29.29 等公共 DNS);
  2. 代理是否被开启:inetcpl.cpl → 连接 → 局域网设置,取消不认识的代理;PowerShell Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' | Select ProxyEnable,ProxyServer;
  3. LMHOSTS 与 hosts 是否同目录存在残留冲突文件;
  4. 浏览器插件是否劫持解析(Chrome 的“安全 DNS/DoH”会绕过系统解析:chrome://settings/security → 使用安全 DNS → 临时关闭测试)。

五、安全提醒

  • hosts 是系统关键文件,不要长期放置不明来源的“加速/屏蔽”列表,那会改变你的真实解析结果;
  • 生产服务器上的 hosts 改动要纳入配置管理(Ansible/SaltStack),并在变更后记录原因,否则半年后没人记得为什么有一行 IP;
  • 写 hosts 不能替代 DNS 架构,域名迁移应改 DNS,hosts 只用于临时验证与本地开发。

六、常见问题 FAQ

问:hosts 里能不能写端口?
答:不能,它只做名称到 IP 的映射,无法指定端口。127.0.0.1:8080 site.local 是无效行。

问:能不能用 hosts 屏蔽网站?
答:可以(指 0.0.0.0),但只对当前机器有效,且被屏蔽方若有 IP 直连或其他入口仍会访问到。

问:改了 hosts 为什么微信/浏览器里的域名还是不通?
答:部分应用自带 HTTPDNS(直接返回 IP、根本不走系统解析),这类场景 hosts 无效。

顺序总结:备份 → 清行 → 保存(注意扩展名)→ 刷缓存(系统 + 浏览器)→ 用 ping/Resolve-DnsName 验证 → 不通再查 DNS/代理/DoH。

生产内容,同时打通搜索引擎(SEO)与AI搜索引擎(GEO)流量入口的软件! 点击进入365建站器 »