Linux 上的 Hosts 文件
所有具有网络支持的操作系统都有一个主机文件,用于将主机名转换为 IP 地址。每当您通过键入主机名打开网站时,系统都会读取主机文件以检查相应的 IP,然后将其打开。主机文件是一个简单的文本文件,位于 Linux 和 Mac OS 上的 /etc 文件夹中 (/etc/hosts)。 Windows也有一个hosts文件,在Windows上你可以在Windows\System32\drivers\etc\中找到它
它是这样的:
根据我们提到的内容,您可能期望该文件具有很长的 IP 和相应主机名列表;但事实并非如此。主机文件仅包含几行;
- 默认情况下,第一部分包含本地主机和计算机的主机名和 IP 地址。这是您通常要修改的部分以进行所需的更改。
- 第二部分包含有关支持 IPv6 的主机的信息,您几乎不需要编辑这些行。
每当您输入地址时,您的系统都会检查主机文件是否存在;如果存在,您将被定向到相应的 IP。如果主机名未在主机文件中定义,您的系统将检查您互联网的 DNS 服务器以查找相应的 IP 并相应地重定向您。
为什么要编辑/etc/hosts 文件?
通过编辑hosts文件,您可以实现以下目的:
- 阻止网站
- 处理攻击或解决恶作剧
- 为本地服务器上的位置创建别名
- 覆盖您的 DNS 服务器提供的地址
- 控制对网络流量的访问
如何编辑/etc/hosts文件?
您只能以超级用户身份编辑位于 /etc/hosts 的主机文本文件。您首先必须在 Linux 终端中的文本编辑器(例如 VI 编辑器、Nano 编辑器或 gedit 等)中打开它。然后,您将进行所需的更改并保存文件以使这些更改生效。
在本文中,我们将使用 Nano 编辑器来编辑该文件。请输入以下命令:
sudo nano /etc/hosts
或者
sudo gedit /etc/hosts
(对于 gedit)
如前所述,我们将编辑定义 IP 地址和主机名的主机文件的第一部分。我们将解释以下两种使用主机文件的方法:
- 阻止网站
- 通过别名访问远程计算机
阻止网站
您可以通过将网站重定向到本地主机的 IP 或默认路由来阻止该网站。
例如,如果我们想阻止 google.com,我们可以将以下文本添加到我们的文件中:
127.0.0.1 www.google.com
现在,当我们打开 google 网站时,我们的系统将从主机文件中获取本地主机的 IP (127.0.0.1) 并将我们重定向到该地址,而不是从 DNS 服务器获取 google IP。
或者
0.0.0.0 www.google.com
现在,当我们打开 google 网站时,我们的系统将从主机文件中获取默认路由 (0.0.0.0) 的 IP,并将我们重定向到该地址,而不是从 DNS 服务器获取 google IP。
这就是编辑后的文件的样子。请按 ctrl+X 保存更改。
现在,当您尝试从浏览器打开 www.google.com 时,您将看到如下错误消息:
请注意,我们在主机文件中定义了完整的地址 www.google.com 而不仅仅是主机名 google.com,因为如果我们只定义后者,现代浏览器有时会绕过该块。
您还可以在主机文件中使用一些预定义的阻止列表:https://github.com/StevenBlack/hosts
通过别名访问远程计算机
假设我们想要访问位于本地网络上的服务器。我们通常必须输入服务器的 IP 才能访问它,除非它已在本地 DNS 上定义。避免一次又一次输入 IP 的一种方法是在主机文件中为服务器分配一个别名,如下所示:
192.168.1.10 myserver
IP对应于我们要访问的服务器的位置,myserver是我们要使用的新别名。
当我们保存文件并在地址栏中输入 myserver 时,我们将被重定向到远程服务器。
我们了解到,通过对主机文件进行非常简单的更改,我们可以根据需要自定义并重定向网络流量。我们还可以通过将主机文件恢复为默认值来消除网络攻击或恶作剧。