MENU

系统文件 hosts 介绍及其妙用

本文详细介绍一下 hosts 及其相关内容。

hosts 是什么

hosts 是一个没有扩展名的系统文件,可以用记事本、Vim、VS Code 等文本编辑工具打开。

127.0.0.1  localhost
223.5.5.5  dns.alidns.com
8.8.4.4 dns.google

它将网址域名与服务器 IP 地址一一对应,当访问一个网站时,系统会先从 hosts 文件中寻找对应服务器的 IP 地址,找到则请求该 IP 获取网页内容。否则再将网址提交 在线 DNS 域名解析服务器查询对应的 IP 地址。

流程

hosts 的请求级别比 DNS 高。

hosts 的常见应用

加快域名解析

有时由于在线 DNS 服务器的问题,计算机无法快速找到需要的 IP 地址,访问就会很慢很慢。先将正确的 IP - 域名 信息保存在 hosts 文件中,就能跳过请求在线 DNS 服务器,从而更快打开网页。

屏蔽网站

先将错误的 IP - 域名 信息保存在本机 hosts 文件中,系统请求时就会得到一个错误的 IP 地址。自然就获取不到内容了。因此反向利用可以用来屏蔽掉一些不希望访问的域名。

127.0.0.1  www.example.com

# 拦截 360 安全卫士下载 域名
0.0.0.0  down.360safe.com

其中 127.0.0.1 为本机 IP,0.0.0.0 为错误的 IP。

有些软件内置了 hosts 或者直接请求 IP 而非域名,或者强制请求自己的在线 DNS 服务器以获取 IP。该类型无法通过修改本机 hosts 文件进行屏蔽。

强制域名解析指定 IP

很多网站为了使不同地区的用户都能快速的打开网页,在不同地区都配备了服务器,当访问网站时,DNS 一般会优先分配一个距离较近的服务器 IP。若该副武器发生故障而网站管理员未来的及切换,有时结果却适得其反。可以修改 hosts 文件强制指定访问哪个 IP。

# 这行前面有 # 号,会被系统忽略无视
# 223.5.5.5  dns.alidns.com
223.6.6.6  dns.alidns.com

IP - 域名 数据的获取

想要随心所欲的修改 hosts 文件并发挥作用,获取正确的 IP - 域名 绑定数据是必要的。

IPAddress 网站查询

访问 IPAddress.com 网站,输入要查询的网站域名,点击输入框右边放大镜图标搜索或回车,向下滑动页面,IP Address and Server Location 栏目表格即为简单的信息,DNS Resource Records 栏目表格中即为查询到的详细结果。

如输入 dns.alidns.com 域名搜索,DNS Resource Records 栏目如下:

NameTypeData
cn dns.alidns.comA223.5.5.5
cn dns.alidns.comA223.6.6.6
cn dns.alidns.comAAAA2400:3200::1
cn dns.alidns.comAAAA2400:3200:baba::1

其中:

  • Name 项 cn 表示中国,后面的 dns.alidns.com 为域名,一般用 @ 指代根域名
  • Type 项为 A 表示 IPv4 协议的 IP 地址,AAAA 表示 IPv6 协议的 IP 地址
  • Data 项的值就是对应 Name 域名及对应 Type 类型的结果

更多有关 Name 的说明详见 子域管理使用规则
更多有关 Type 的说明详见 各记录类型说明及规则

使用 DoH API

如使用阿里云提供的公共 DoH JSON API 服务:

$ curl "https://dns.alidns.com/resolve?name=dns.alidns.com&type=A&short=true"
["223.5.5.5","223.6.6.6"]

更多提供公共 DoH JSON API 服务的请查阅往期文章:《安全公共 DNS》

hosts 的修改

上文说到 hosts 本质是一个没有扩展名的系统文件,使用记事本、Vim、VS Code 等文本编辑工具即可打开查阅或修改。只需要找到 hosts 文件存放目录,以 .txt 格式打开修改即可。部分系统 hosts 文件路径或修改位置如下:

  • Windows:%SystemRoot%\System32\drivers\etc\hostsC:\Windows\System32\drivers\etc\hosts
  • Android:/etc/hosts(指向 /system/etc/hosts 的符号链接)
  • iOS:/etc/hosts(指向 /private/etc/hosts 的符号链接)
  • Mac OS X 10.0–10.1.5:通过 NetInfo 或 niload 设置
  • Mac OS X 10.2 和更新版本:/etc/hosts(指向 /private/etc/hosts 的符号链接)
  • Unix、类 Unix 系统(例如 Linux 等):/etc/hosts
  • Windows Mobile、Windows Phone:注册表项 HKEY_LOCAL_MACHINE\Comm\Tcpip\Hosts
  • Symbian OS 6.1–9.0:C:\system\data\hosts
  • Symbian OS 9.1+:C:\private\10000882\hosts

IP + 几个空格 + 域名 的格式修改,一行一个,可用 # + 内容 标注,如:

# 我是标注 会被忽略
# 223.5.5.5  dns.alidns.com 我也是标注 井号后的都会被忽略
223.6.6.6  dns.alidns.com # 我也是标注 井号前的不会被忽略
       2400:3200::1        dns.alidns.com     # 我的空格有点多
2400:3200:baba::1       dns.alidns.com

大部分系统需要拥有 系统管理员 或 ROOT 权限或使用 系统管理员账户 才允许修改 hosts 文件。

后记

鉴于本人知识有限,文中可能有部分内容错误或理解偏差,欢迎留言指出。


加入 QQ群 与小伙伴一起玩耍!

最后编辑于: 2022 年 03 月 08 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码