ping 如何找出网站的 IP 地址?

ping 如何找出网站的 IP 地址?

我正在尝试更好地了解不同的网络查询工具,例如、、、,nc同时更多地了解互联网请求、服务器等的架构(NIC、A 记录、MX) curl,同时已经对 TCP、名称服务器、域名注册商、数据包嗅探器、HTTP 标头和 IP 地址有所了解。这是我的背景,这是我的问题。whoisdignslookup

当我dig或者whois假设 www.valgrind.org (或 valgrind.org) 时,我得到至少两个不同的 IP 答案:178.250.76.80 和 172.16.0.23#53。

$ nslookup valgrind.org
Server:         172.16.0.23
Address:        172.16.0.23#53

Non-authoritative answer:
Name:   valgrind.org
Address: 178.250.76.80

尝试浏览或中的其中一个w3mchromium导致403 Forbidden错误。此外,我不确定要导航到哪一个, ping能够找到答案!如果我ping valgrind.org(或ping www.valgrind.org)它选择

$ ping valgrind.org
PING valgrind.org (178.250.76.80) 56(84) bytes of data.
64 bytes from 178.250.76.80: icmp_req=1 ttl=50 time=80.2 ms

它怎么知道要这么做?我应该使用什么其他工具来了解我的浏览器如何从178.250.76.80valgrind.org加载某些内容?

答案1

这里有不同的程序和协议在运行,每个程序和协议都配置为独立于其他程序和协议做出响应。

要查找 IP 地址,Linux 主机通常会使用 hosts: 指令/etc/nsswitch.conf确定查询各种来源的顺序。典型的输入是

hosts:      files dns

它说检查文件(通常/etc/hosts) 然后是 DNS 系统。因此,将对 /etc/hosts 文件进行搜索,如果该文件包含 valgrind.org 的条目,则将返回关联的 IP 地址。如果 /etc/hosts 不包含 valgrind.org 的条目,则将向 DNS 发出请求。这涉及读取/etc/resolv.conf 确定应联系哪些服务器来请求 DNS 信息...

查看命令的输出,您没有得到两个不同的地址。输出的第一部分告诉您哪个服务器被nslookup(172.16.0.23)以及在哪个端口(#53)上获取答案。我们还知道 172.16.0.23 没有正确配置的 PTR 记录,因为如 RobM 的答案所示,如果正确配置了 PTR 记录,服务器将显示为名称。

输出的第二部分是您请求的信息,并告诉您 178.250.76.80 是 valgrind.org 的 IPv4 地址。

当您通过端口 80 联系 178.250.76.80 时(http) 你会直接得到一个 403 forbidden,因为这个地址的 http 服务器就是这样配置的。它很可能配置为基于名称的虚拟服务器,因此需要有效的 http主持人:(第 14.23 节)标头将您的请求路由到适当的虚拟主机。

ping 命令是ICMP 协议套件并且是 ICMP 回显请求,则 178.250.76.80 处的主机响应 ping,因为它已被配置为这样做,并向每个回显请求发送 ICMP 回显答复。

答案2

您需要了解 nslookup 的工作原理。

nslookup

答案的第一部分,在这里应该会更清楚,是您正在与之交谈的名称服务器。它提供的答案是第二部分

因此在我的示例中,我要求 nslookup 查询我当前配置的 DNS 服务器,以查找它认为 www.serverfault.com 的位置。

nslookup 会回复用于运行查询的服务器的地址以及它给出的答案。如果您要指定特定的 DNS 服务器来运行 dig 或 nslookup,这一点很重要,这是解决名称解析问题的一个相当正常的一部分。

答案3

您误解了 nslookup 的输出。它没有给出两个答案,而只有一个。第一个地址是它从哪里得到答案。 ping执行完全相同的任务并获得完全相同的结果。当您尝试将 IP 地址提供给浏览器时收到 403 的原因是因为服务器正在运行虚拟托管。使用虚拟托管,服务器可以拥有多个站点,只有一个 IP 地址。它根据浏览器告诉它您输入的名称来决定为您服务哪个站点。当您输入 IP 地址时,服务器不知道您想要哪个站点。

答案4

这取决于您的操作系统和 ping 版本。如果是 Linux,您可以使用 strace 找出所有正在做的事情。

strace ping valgrind.org

它会一步一步地告诉你。太长了,无法发布,但这是我的输出,这样我知道在某个时候它会检查 hosts 文件

.
.
open("/etc/host.conf", O_RDONLY)        = 3
.
.
.

相关内容