我一直在研究我的 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.txt
DNS 条目,这样hosts.txt
可以用作 DNS 覆盖。这在 DNS 中不存在本地名称但网络上没有足够的主机来设置本地全权威 DNS 服务器并完成所有操作的情况下尤其有用。
然而,现代网络浏览依赖的远不止名称到 IP 地址的映射。
典型的过程类似于:
- 用户在浏览器的地址栏中输入 URL,或以其他方式触发 Web 请求
- 浏览器根据 URL 查找主机名、IP 地址,并连接到该 IP 地址
- 如果 URL 是
https://
URL ,浏览器会建立 HTTPS 会话
- 如果提供的证书与 URL 中的主机名不匹配,浏览器将中止
- 浏览器告诉远程 Web 服务器为其提供路径
/something/whatever
浏览器告诉远程 Web 服务器根据 URL 中的主机名 - 远程 Web 服务器响应所请求的资源,如果由于某种原因无法满足请求,则通常会返回错误
- 浏览器解释并显示从远程 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.100
IP 地址和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 查找,通常会使用host
或dig
。)
答案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。