hosts 文件:绕过 DNS 的本地映射机制

在网络通信中,当我们在浏览器地址栏输入一个网站域名(例如:www.example.com)时,计算机需要将这个易读的域名解析成对应的 IP 地址(例如:192.168.1.100),才能找到目标服务器并建立连接。这个解析过程通常依赖于 DNS(Domain Name System)域名系统

然而,在计算机查找 DNS 服务器进行域名解析之前,它会优先查看一个本地的文本文件。这个文件就是我们今天要深入探讨的——hosts 文件

hosts 文件是什么?为何了解其位置至关重要?

简单来说,hosts 文件是一个没有文件扩展名的纯文本文件,它记录了 IP 地址与主机名(域名)之间的映射关系。它的作用类似于一个本地的、优先于 DNS 的地址簿。

它的基本工作原理是:

  1. 当你在浏览器或其他网络应用中输入一个域名时,操作系统首先会检查 hosts 文件。
  2. 如果 hosts 文件中存在该域名的记录,系统会立即使用 hosts 文件中指定的 IP 地址,而不会去查询外部的 DNS 服务器。
  3. 如果 hosts 文件中没有该域名的记录,系统才会继续向配置的 DNS 服务器发起查询。

那么,为什么了解 hosts 文件的准确位置如此重要呢?

  • 网站屏蔽:通过将某个网站的域名指向一个无效或本地地址(如 127.0.0.10.0.0.0),可以有效地阻止计算机访问该网站。
  • 网站重定向:可以将某个域名指向另一个自定义的 IP 地址,用于测试、访问特定版本的网站或绕过某些限制。
  • 本地开发与测试:在本地搭建服务器进行网站或应用开发时,可以使用 hosts 文件将开发环境的域名指向本地回环地址(127.0.0.1),方便测试。
  • 提高访问速度:对于一些常用但不经常变动的网站,可以将其域名与 IP 地址直接记录在 hosts 文件中,省去 DNS 查询的时间(尽管现代 DNS 缓存已经很快)。
  • 防止恶意软件篡改:某些恶意软件可能会修改 hosts 文件,将合法网站重定向到钓鱼网站。了解其位置有助于检查和修复。

正因为 hosts 文件具有直接影响域名解析和网络访问行为的能力,找到并能够安全地访问及编辑它,是进行上述操作的基础。

hosts 文件究竟在哪里?(分操作系统)

hosts 文件在不同的操作系统中的存放位置是固定的,但路径有所不同。了解你正在使用的操作系统是找到它的第一步。

Windows 系统

在 Windows 操作系统中,无论你是 Windows 7、Windows 8、Windows 10 还是 Windows 11,hosts 文件的默认位置通常都相同:

C:\Windows\System32\drivers\etc\hosts

请注意:

  • C: 是系统盘的盘符,如果你的系统安装在其他盘,请替换为相应的盘符。
  • Windows 是系统安装目录的名称,通常默认为 Windows。
  • System32 包含了系统重要的文件和驱动,即使是 64 位系统,hosts 文件也通常在这里。
  • drivers 目录存放驱动程序。
  • etc 目录在类 Unix 系统中常见,Windows 为了兼容性和历史原因保留了这个目录来存放一些配置文件,其中就包括 hosts 文件。
  • 文件名为 hosts,没有文件扩展名。

macOS (Mac OS X) 系统

在苹果的 macOS 操作系统中,hosts 文件位于一个标准 Unix 路径下:

/etc/hosts

请注意:

  • 在 macOS 中,/etc 实际上是 /private/etc 的一个符号链接(快捷方式)。所以,/etc/hosts/private/etc/hosts 指向的是同一个文件。你可以通过这两个路径中的任意一个访问到它。
  • 文件名为 hosts,没有文件扩展名。

Linux 系统

在绝大多数 Linux 发行版中(如 Ubuntu, Fedora, Debian, CentOS 等),hosts 文件也位于标准的 Unix 路径下:

/etc/hosts

这与 macOS 的路径相同。

请注意:

  • /etc 目录存放系统的配置文件。
  • 文件名为 hosts,没有文件扩展名。

如何找到并访问 hosts 文件?

找到了文件路径,接下来就是如何在你的操作系统中实际找到并打开它。

在 Windows 系统中

  1. 打开文件资源管理器:点击任务栏上的文件夹图标,或按下 Windows 键 + E
  2. 导航到目录:在文件资源管理器的地址栏中直接粘贴路径 C:\Windows\System32\drivers\etc 并按回车。或者手动一级一级地双击进入:打开 C: 盘 -> Windows 文件夹 -> System32 文件夹 -> drivers 文件夹 -> etc 文件夹。
  3. 找到 hosts 文件:etc 文件夹中,你会看到一些文件,其中一个就是没有扩展名的 hosts 文件。
  4. 打开 hosts 文件:直接双击 hosts 文件,系统会询问你使用什么程序打开它。选择一个纯文本编辑器,如“记事本”(Notepad)。

    注意:直接打开通常只有读取权限,无法保存修改。

    要编辑并保存,请看下一节关于权限的部分。

  5. 更快捷的方式(使用运行):按下 Windows 键 + R 打开“运行”对话框,输入 notepad C:\Windows\System32\drivers\etc\hosts 并按回车。这会尝试使用记事本直接打开 hosts 文件,但同样可能面临权限问题。

在 macOS 系统中

  1. 打开 Finder:点击 Dock 栏上的 Finder 图标。
  2. 使用“前往文件夹”:在 Finder 菜单栏中,点击“前往”(Go),然后选择“前往文件夹…”(Go to Folder…),或使用快捷键 Shift + Command + G
  3. 输入路径:在弹出的对话框中输入 /etc/private/etc 并点击“前往”。
  4. 找到 hosts 文件:在打开的 etc 文件夹中找到 hosts 文件。
  5. 打开 hosts 文件:你可以双击用文本编辑器(如 TextEdit)打开它。

    重要提示:macOS 下直接打开也通常只有读取权限。编辑需要使用命令行工具并带上管理员权限。

在 Linux 系统中

在 Linux 系统中,最常用的方法是使用命令行终端来访问和编辑 hosts 文件。

  1. 打开终端:通常可以在应用菜单中找到“终端”或使用快捷键 Ctrl + Alt + T
  2. 导航到目录(可选):你可以使用 cd /etc 命令切换到 hosts 文件所在的目录,然后使用 ls 命令查看文件列表确认 hosts 文件存在。
  3. 打开 hosts 文件(读取):可以使用任何文本查看器命令来读取文件内容,例如:

    cat /etc/hosts

    less /etc/hosts

  4. 编辑 hosts 文件:编辑 hosts 文件

    必须

    使用具有管理员权限的文本编辑器。最常见的方法是使用 sudo 命令配合命令行文本编辑器(如 nano, vim, gedit 等)。例如,使用 nano 编辑器:

    sudo nano /etc/hosts

    输入你的用户密码后,nano 编辑器会在终端中打开 hosts 文件,允许你进行修改。完成后,按 Ctrl + X,然后按 Y 确认保存,按 Enter 确认文件名。

如何正确编辑 hosts 文件?(涉及权限与语法)

无论使用哪种操作系统,编辑 hosts 文件都需要特殊的权限,因为它是系统核心配置文件之一。此外,了解其简单的语法规则是正确使用的前提。

编辑前的关键:管理员/Root权限

由于 hosts 文件对系统网络行为有重要影响,操作系统对其进行了保护。普通用户通常只有读取权限,没有写入(修改)权限。要保存对 hosts 文件的修改,你必须以管理员身份(Windows)root 用户身份(macOS/Linux)打开并编辑文件。

  • Windows:找到你想要使用的文本编辑器(如记事本 Notepad),右键点击它,选择“以管理员身份运行”(Run as administrator)。打开编辑器后,再通过“文件”->“打开”菜单,导航到 C:\Windows\System32\drivers\etc 目录,选择 hosts 文件打开。
  • macOS/Linux:如前所述,在终端中使用 sudo 命令来启动文本编辑器打开 hosts 文件。sudo 命令允许你以 root 用户的权限执行后续命令。

如果你没有以足够的权限打开文件,你将无法保存你的修改,或者系统会提示你另存为其他文件。

hosts 文件的基本语法

hosts 文件的语法非常简单,每行代表一个映射关系或注释。

  • 映射规则:

    每条有效的映射规则占一行,格式为:IP地址 主机名 [可选别名]

    192.168.1.100 mylocalserver
    127.0.0.1 localhost
    127.0.0.1 www.facebook.com facebook.com

    IP 地址和主机名之间至少需要一个空格或 Tab 键进行分隔。一行中可以为一个 IP 地址指定多个主机名(别名),它们之间也用空格或 Tab 隔开。

  • 注释:

    # 符号开头的一行或一行中的 # 符号后的内容都会被视为注释,系统会忽略它们。

    # 这是一个注释示例
    192.168.1.101 test.mysite.com # 本地测试网站

    注释可以用来解释某条规则的作用,或者临时禁用某条规则(只需在该行开头加上 #)。

  • 空行:

    空行会被忽略,可以用来提高文件的可读性。

请确保你添加的每一行都遵循这个简单的格式,避免因为格式错误导致文件失效或部分条目不生效。

保存与生效

当你使用具有足够权限的文本编辑器修改并保存 hosts 文件后,这些更改通常会立即生效,或者在很短的时间内自动生效。这是因为操作系统会优先检查这个文件。

在某些情况下,尤其是在 Windows 系统上,如果你发现修改没有立即生效,可能需要刷新系统的 DNS 缓存。这可以通过命令行工具完成:

  • Windows:打开命令提示符或 PowerShell(最好以管理员身份运行),输入命令 ipconfig /flushdns 并按回车。
  • macOS:打开终端,输入命令 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder 并按回车(可能需要输入密码)。
  • Linux:不同的发行版和配置刷新 DNS 缓存的方法不同,有时甚至不需要手动刷新。常见的命令可能包括 sudo systemd-resolve --flush-caches 或重启网络服务等。但通常情况下,hosts 文件的修改会立即生效。

关于 hosts 文件大小与影响的补充

hosts 文件本身是一个非常小的纯文本文件,其大小主要取决于你添加的映射条目数量和注释。通常只有几十 KB 甚至更小,即使添加了成百上千条规则,其文件大小也远不足为虑。

尽管文件体积微小,但它对系统网络行为的影响是直接且优先的。如果 hosts 文件中包含的条目与外部 DNS 解析结果冲突,系统会无条件地采纳 hosts 文件中的记录。这也是它强大的原因所在,但也意味着如果 hosts 文件被病毒或恶意程序篡改,可能会导致你无法访问某些网站,或者被导向虚假网站。

因此,定期检查 hosts 文件的内容,确保其中只有你自己添加的或系统默认的条目,是维护系统安全的一个好习惯。

了解 hosts 文件的位置及其使用方法,赋予了我们在本地控制域名解析的强大能力,无论是为了开发、测试、屏蔽干扰还是增强安全性。掌握这些知识,能够帮助你更好地管理你的计算机网络环境。

hosts文件位置

By admin

发表回复