GitHub DNS实现C代码返回无效IP,是否正常及如何判断有效IP?
问题描述
我运行了一款实现DNS查询功能的C代码,输入主机名edition.cnn.com后,程序返回了4个IPv4地址:
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是可用的?
解答
这种情况是正常的
大型网站通常会通过DNS返回多IP实现负载均衡,这些IP可能存在地域限制、临时维护,或者因为浏览器直接访问IP时未携带Host请求头,导致服务器无法识别对应站点——像CNN这类网站的服务器需要依靠Host头匹配正确的站点配置,直接输IP访问时浏览器不会自动添加该字段,所以即使IP可用也可能无法返回有效页面。
判断IP可用性的方法
- 用ping测试网络连通性:在终端执行
ping 151.101.3.5(替换为目标IP),能收到回复说明网络层面可连通该IP,但部分服务器会禁用ping响应,所以ping不通不代表IP不可用。 - 用curl模拟带Host头的访问:在终端执行
curl -H "Host: edition.cnn.com" https://151.101.3.5,手动携带Host头发起请求,能返回正常网页内容的即为可用IP。 - 用telnet测试端口开放状态:执行
telnet 151.101.3.5 443或telnet 151.101.3.5 80,能建立连接说明对应HTTPS/HTTP端口处于开放状态。
内容的提问来源于stack exchange,提问作者intrigued_66
相关产品推荐
相关产品推荐

