总结:

总结:

我一直在研究我的 Windows 10 主机文件,以更好地了解它的工作原理,但我还没有成功重定向地址。

我正在尝试将 yahoo.com 或 www.yahoo.com 重定向到 216.58.209.36 (www.google.com),我输入:

216.58.209.36  yahoo.com
216.58.209.36  www.yahoo.com

但是当我尝试在浏览器中加载它时它告诉我

无法访问此网站

www.yahoo.com 响应时间太长。

有人知道我做错了什么吗?
我也尝试过清除浏览历史记录。

答案1

我认为您误解了该文件的用途hosts.txt

如果你只关心 TL;DR(太长;没有读),那么请向下滚动到答案的底部。接下来是对发生的事情的解释,以帮助你理解为什么你正在获得你正在获得的结果。

hosts.txt(通常/etc/hosts在类 Unix 系统上)提供主机名和 IP 地址之间的映射。然后,系统名称解析器通常配置为优先使用hosts.txtDNS 条目,这样hosts.txt可以用作 DNS 覆盖。这在 DNS 中不存在本地名称但网络上没有足够的主机来设置本地全权威 DNS 服务器并完成所有操作的情况下尤其有用。

然而,现代网络浏览依赖的远不止名称到 IP 地址的映射。

典型的过程类似于:

  1. 用户在浏览器的地址栏中输入 URL,或以其他方式触发 Web 请求
  2. 浏览器根据 URL 查找主机名、IP 地址,并连接到该 IP 地址
  3. 如果 URL 是https://URL ,浏览器会建立 HTTPS 会话
  • 如果提供的证书与 URL 中的主机名不匹配,浏览器将中止
  1. 浏览器告诉远程 Web 服务器为其提供路径/something/whatever浏览器告诉远程 Web 服务器根据 URL 中的主机名
  2. 远程 Web 服务器响应所请求的资源,如果由于某种原因无法满足请求,则通常会返回错误
  3. 浏览器解释并显示从远程 Web 服务器接收到的数据,或根据这些数据采取行动
  • 如果收到的数据是重定向,则流程将从步骤 1 开始,并使用该 URL

通过编辑hosts.txt你改变仅有的上面第 2 步中发生了什么。网页浏览比名称查找要复杂得多!

另请注意,网络浏览器有时会实现他们自己的名称查找功能,而不是将任务转移给操作系统提供的解析器。在这种情况下,即使第 2 步也不一定能让您获得想要的结果,因为它很可能遵循来自 DNS 根的正常名称委派路径,因此您获得的响应与否则获得的响应相同;在这种情况下,hosts.txt永远不会被咨询!

值得注意的是,浏览器仍然会在步骤 3 中等待 URL 中特定主机名的证书;并且它会告诉远程 Web 服务器您在步骤 4 中提供的主机名。

由于 Google 的网络服务器不太可能设置为提供www.yahoo.com(无论是通过 HTTP 还是 HTTPS),因此此操作最迟会在步骤 4 和步骤 5 之间失败(远程网络服务器无法提供所请求的资源)。

我无法很好地解释为什么你会得到暂停而不是 Web 服务器错误响应,但失败的方式很大程度上取决于远程服务器,所以我怀疑当被问及它根本不知道的主机时,它完全有权利不做出任何响应。

当然,如果你只是在尝试,就没有必要使用 Yahoo 或 Google。相反,有 Internet IP 地址和主机名专门留作示例和文档目的这对于此很有用。例如,您可以使用192.0.2.100IP 地址和test.example.com主机名,因为它们都不属于任何特定人员。或者RFC 1918空间(10.0.0.0 到 10.255.255.255、172.16.0.0 到 172.31.255.255 或 192.168.0.0 到 192.168.255.255),但您仍然需要一个相应的域名,对于这些保留的域名来说,这是很好的。

总结:

如果您想查看您的hosts.txt条目是否按预期执行,请打开命令提示符并发出命令ping -n 1 www.yahoo.com(在您的例子中)。它应该使用您配置的 IP 地址进行响应。-n 1只会导致发送一个回显请求,因为我们真正感兴趣的是名称查找的结果。

我会比较喜欢nslookup www.yahoo.com,但是显然在 Windows 上,nslookup它不会查看hosts.txt任何一项。(在 Linux 上,它通常会查看,因为它会询问系统解析器,而系统解析器通常配置为查阅 hosts 文件;如果要在 Linux 上进行纯 DNS 查找,通常会使用hostdig。)

答案2

您的 hosts 文件将 yahoo.com 重定向到 216.58.209.36,这是理所当然的。它之所以没有按预期工作,可能是因为 216.58.209.36 后面的 Web 服务器会查找名为 yahoo.com 的站点,但由于该服务器不托管该站点,因此找不到该站点,从而告诉您无法访问该站点。

这有点像拨错电话号码。如果你打电话给 Alice 并询问 Bob,她可能会回答“这里没有叫这个名字的人”。

答案3

你没有做错任何事。为了向自己证明你的 hosts 文件条目达到了预期的效果,请从命令提示符运行以下命令:

ping www.yahoo.com

...并观察被 ping 的 IP 地址是您在hosts文件中指定的 IP 地址。

正如 FastEthernet 中所述回答通过未分配给服务器的主机名访问 Web 服务器可能会导致意外行为。但是,最好使用上面的 ping 命令来验证主机名是否已映射到您的自定义 IP 地址,而不是依赖于能否在浏览器中加载网站。

答案4

您可能会遇到各种与安全措施有关的问题,因为 Google 网站没有提供正确的证书,因此无法被认真视为 Yahoo。

相关内容