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