系统文件 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。
强制域名解析指定 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
栏目如下:
Name | Type | Data |
---|---|---|
cn dns.alidns.com | A | 223.5.5.5 |
cn dns.alidns.com | A | 223.6.6.6 |
cn dns.alidns.com | AAAA | 2400:3200::1 |
cn dns.alidns.com | AAAA | 2400: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\hosts
或C:\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
后记
鉴于本人知识有限,文中可能有部分内容错误或理解偏差,欢迎留言指出。
