实现 DNS 的 C 代码返回无效的 IP 地址

问题描述 投票:0回答:2

我正在 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 地址时,它不是一个有效的网页。

这是预期的吗?您如何知道哪一个响应是正确/有效的?

c http dns ip
2个回答
0
投票

这些是正确的 IP 地址。检查一下:https://dnschecker.org/#A/edition.cnn.com

直接通过IP访问时出现的错误是常见的名称不匹配。 当 SSL/TLS 证书的公用名或 SAN 与浏览器中的域或地址栏不匹配时,会发生公用名不匹配错误。这是一项有助于防止网络钓鱼的安全功能。


0
投票

网站和IP地址之间不存在一一对应关系。

不仅(正如您已经发现的)edition.cnn.com 通过许多不同的 IP 地址可见,而且这些 IP 地址中的每一个都可能托管无数的网站,这反过来意味着在许多情况下,您不能只将浏览器定向到 IP 地址并期望看到网站。

HTTP GET 请求包含一个“HOST”字段,该字段应该包含 HTTP 请求所寻址的 Web 路径。

  • 如果您在地址栏中输入 https://edition.cnn.com 浏览器,那么 HOST 字段将包含此主机名,因此 最终收到此请求的服务器知道它是哪个站点 适用于可能托管在同一 IP 上的许多网站 地址。

  • 但是,当您告诉浏览器访问某个 IP 地址时, HOST 字段要么为空,要么包含 IP 地址 您输入的内容,因此服务器将无法知道哪个主机 请求的名称,因此请求将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.