hosts文件是什么意思?改一行就能屏蔽一个网站,木马最爱偷偷改它

前同事那台办公电脑出过一档子怪事:淘宝首页打得开,一点登录就转圈,浏览器还弹大红叉说证书有问题。杀毒软件全盘查了一遍,绿得发光。我远程过去看半天,路由器DNS正常、别的电脑都好,卡了一个多小时,鬼使神差想起还有一个地方没翻——hosts文件。打开一看,底下压着三行,某购物域名全被指到一个陌生IP上。删掉那三行,立马就好了。
这文件没几个人知道,但它是域名解析的第一站,比DNS还靠前。今天把它讲透:是什么、在哪、怎么改、能干什么、被谁惦记。
hosts是电脑口袋里那张纸条
平时敲一个域名,大家默认是去问DNS服务器要IP,那套问路的流程我拆过。但完整顺序里还有个前置动作:系统先摸自己口袋,翻一本叫hosts的小本本。本本上有这个域名,直接拿上面的IP用,DNS服务器压根不会被问到;没有,才出门去问。
这本通讯录不是什么新发明,恰恰相反,它是DNS的老祖宗。最早全互联网就靠一个hosts文件对域名,人工下载同步,后来网站多到没法记才发明了DNS。老归老,规矩到今天没变:hosts里有的,系统直接用。
我在自己电脑上做了个硬核验证。往hosts里塞了一行127.0.0.1 www.shunot.com——把我自己的博客指到127.0.0.1这个「自己家」地址上。然后用python问了一声解析:
www.shunot.com -> 127.0.0.1
真实IP是49.51.202.150,DNS里记的就是它。但系统连问都没问DNS,张口就回127.0.0.1,因为纸条上写了。删掉这行再问,马上恢复成49.51.202.150。全程不用重启浏览器、不用重启电脑,加一行删一行,立竿见影。
这个「优先级」就是hosts全部威力的来源:改它一行,等于在这台电脑上给某个网站改了门牌。
在哪、长什么样、为什么你改不动
Windows里它的位置在C:\Windows\System32\drivers\etc\hosts,没有扩展名;Mac和Linux在/etc/hosts。用记事本就能开,长得特别朴素:
127.0.0.1 localhost
::1 localhost
172.18.0.2 DESKTOP-XX
一行一条,前面IP后面域名,中间空格或Tab都认,井号开头的是注释。默认就这几行,localhost指自己、IPv6那几条是系统自留的。
第一次改的人九成会卡在同一个地方:记事本打开没问题,一保存弹「拒绝访问」。因为etc这个目录归系统管,普通权限的记事本只能看不能写。正路是开始菜单搜记事本,右键「以管理员身份运行」,再从记事本里文件→打开,手动粘路径进去,这样保存才存得进去。
还有个更阴的坑:文件资源管理器默认隐藏扩展名,你「另存为」一个hosts,实际落盘的是hosts.txt,系统根本不认,改了半天等于没改。改完保存后务必看一眼文件名后面有没有偷偷多个.txt。
我加一行试给它看:屏蔽立刻生效
知道优先级之后,最实用的玩法就通了:把不想让这台电脑访问的域名,指到127.0.0.1上。
127.0.0.1是「自己」的门牌。一个网站被指到自己家,等于这台电脑访问它就是敲门敲自己家,永远无人应答,秒失败。我拿一个测试域名试过,加一行127.0.0.1 test.example.com,浏览器里这个域名当场打不开,快得像网站消失了。有人愿意抠细节的话,写0.0.0.0失败得更快一点,127.0.0.1还要等自己家的端口回个「没人」,0.0.0.0直接判无效,家用场景两者差别感觉不出来。
关键它只管这一台电脑,不动路由器、不影响家里手机平板。好处是精准,坏处也在这儿——只保一台,别的设备白搭。所以它是「电脑层的篱笆」,跟路由器那层不冲突:
| 想拦的层次 | 在哪改 | 管住谁 |
| 只管这台电脑 | hosts文件 | 这一台,别机无感 |
| 管全家所有设备 | 路由器屏蔽/DNS层 | 手机平板电视全算 |
真要管全家,路由器那层的办法我写过一篇五条路拦不同层次的梳理,NAS玩家还可以自建AdGuard Home让全家DNS走它,我家跑一个月拦六万条的那次记录在这。hosts是这里面门槛最低的:不用登录任何后台,会开记事本就行。
三个正经用处,第二个最少人知道
第一个,给孩子的电脑加道手工篱笆。我家娃一年级开始用书房那台旧电脑查资料,几个游戏网站的域名我直接压进hosts指到127.0.0.1,比跟路由器家长控制比起来糙是糙了点,但胜在这台电脑上永远生效,换浏览器、清缓存都绕不过去——解析这关就掐死了。
第二个,给内网设备记门牌。家里NAS我钉的静态IP是192.168.31.10,手机上装App访问要记这串数字(给我妈配手机访问NAS那三条路里写过)。电脑上更省事的办法是在hosts里加一行192.168.31.10 nas.home,以后浏览器、资源管理器里直接敲nas.home就到,不用背IP。有人说NAS不是支持名字直连吗,那套自动发现的机制叫mDNS,投屏搜得到全靠它,但它有个毛病是时灵时不灵、Windows老版本压根不认。hosts就是手动版的名字解析,写死在那儿,永不失灵。
第三个,开发测试。做网站的同事把域名临时指到自己电脑上跑本地版本,改完hosts刷新就能像访问真站一样测,测完删掉。家用场景碰不着,知道有这回事就行。
木马最爱它:同事电脑那三行就是这么来的
回到开头那台电脑。为什么木马偏爱改hosts?你从攻击者角度想一下就明白:改路由器DNS动静大、全家遭殃容易被发现;往一台电脑的hosts里塞三行,神不知鬼不觉,只坑这一个人,文件改完木马自己删自己,杀毒软件事后查个寂寞。
那三行把购物网站的登录页指到一个假IP上,假站把页面做得一模一样等着收账号密码。但有个细节救了我同事:登录页是https开头的,真网站配有真证书,假IP上那台服务器拿不出对应证书,浏览器才弹大红叉。https那套证书机制我拆过一次,这里它立了大功——证书对不上号就罢工,正是这道闸把钓鱼站挡在门外。反过来讲,哪天你遇到「网站打不开还弹证书警告」,别光顾着重试,hosts值得翻一眼。
自查特别简单,就一条红线:hosts里除了localhost和机器名,多出来的每一行都得说得出来历。有些破解软件、绿色版工具也爱往里写激活域名的屏蔽行,不是木马但同样得知道它写了什么。路由器层面的被黑自查我另有一篇更全的清单,从DNS设置翻到端口映射的五个地方,hosts这道是电脑侧的,两层互补。
改了不生效?三种情况挨个数
第一种,缓存顶住了。浏览器自己会缓存DNS解析结果,Chrome在地址栏敲chrome://net-internals/#dns进去点Clear host cache;系统层还有一道,管理员命令行里ipconfig /flushdns清掉。网页缓存那四层我清过一遍,DNS这两层跟它是邻居关系,排查思路一样:改了不生效,先怀疑有缓存替旧答案挡着。
第二种,存了个假文件。就是前面说的hosts.txt,或者干脆没保存成功(权限没给够,记事本静默失败)。右键文件看修改时间,时间没变就是压根没存上。
第三种,企业电脑被管着。有些公司电脑组策略直接锁死hosts,个人杀毒软件也会把hosts改动当可疑行为拦下来弹窗,企业环境别硬掰,找IT。
顺带把边界说清楚:手机上没这东西。安卓要root才能碰hosts,iOS压根不给入口。所以想在手机上屏蔽域名,只能往路由器层走——路由器屏蔽、过滤DNS或者AdGuard Home那几条路,选一个。
收个尾,hosts这东西记三句就够:解析第一站,纸条上有就不问路;改它要管理员权限,存完看一眼扩展名;电脑上网站打不开还弹证书警告,先翻它。一分钟的事,省得像我那次卡一个多小时。
| 想干的事 | hosts能不能办 | 怎么办 |
| 屏蔽某网站(只这台电脑) | 能,最省事 | 域名指到127.0.0.1 |
| 屏蔽全家的设备 | 办不了 | 走路由器屏蔽或AdGuard Home |
| 给NAS起个好记的名字 | 能 | IP加自定义名字一行 |
| 手机上屏蔽 | 办不了 | 手机没hosts,去路由器层想办法 |
