我正在 Github 上执行此代码,该代码查询用户提供的域名并实现 DNS:
https://gist.github.com/fffaraz/9d9170b57791c28ccda9255b48315168
当我运行程序时,它会要求一个主机,所以我给了它
edition.cnn.com
我收到这样的回复:
Enter Hostname to Lookup : edition.cnn.com
Resolving edition.cnn.com
Sending Packet...Done
Receiving answer...Done
The response contains :
1 Questions.
4 Answers.
0 Authoritative Servers.
0 Additional records.
Answer Records : 4
Name : edition.cnn.com has IPv4 address : 151.101.3.5
Name : edition.cnn.com has IPv4 address : 151.101.67.5
Name : edition.cnn.com has IPv4 address : 151.101.131.5
Name : edition.cnn.com has IPv4 address : 151.101.195.5
Authoritive Records : 0
Additional Records : 0
但是,当我在网络浏览器中输入第一个 IP 地址时,它不是一个有效的网页。
这是预期的吗?您如何知道哪一个响应是正确/有效的?
这些是正确的 IP 地址。检查一下:https://dnschecker.org/#A/edition.cnn.com
直接通过IP访问时出现的错误是常见的名称不匹配。 当 SSL/TLS 证书的公用名或 SAN 与浏览器中的域或地址栏不匹配时,会发生公用名不匹配错误。这是一项有助于防止网络钓鱼的安全功能。
网站和IP地址之间不存在一一对应关系。
不仅(正如您已经发现的)edition.cnn.com 通过许多不同的 IP 地址可见,而且这些 IP 地址中的每一个都可能托管无数的网站,这反过来意味着在许多情况下,您不能只将浏览器定向到 IP 地址并期望看到网站。
HTTP GET 请求包含一个“HOST”字段,该字段应该包含 HTTP 请求所寻址的 Web 路径。
如果您在地址栏中输入 https://edition.cnn.com 浏览器,那么 HOST 字段将包含此主机名,因此 最终收到此请求的服务器知道它是哪个站点 适用于可能托管在同一 IP 上的许多网站 地址。
但是,当您告诉浏览器访问某个 IP 地址时, HOST 字段要么为空,要么包含 IP 地址 您输入的内容,因此服务器将无法知道哪个主机 请求的名称,因此请求将会失败。