如何获取域的**所有** IP地址?

And*_*Eve 3 networking domain-name-system windows

我构建了http://beej.us/guide/bgnet/html/multi/syscalls.html#getaddrinfo提供的 getaddrinfo() 示例

当我在示例域(例如 facebook.com)上运行它时,它会列出三 (3) 个 IP 地址:

  IPv4: 69.63.189.11
  IPv4: 69.63.189.16
  IPv4: 69.63.181.12
Run Code Online (Sandbox Code Playgroud)

但是,我知道 facebook.com 有更多地址(至少 20 个),如以下答案所示:

http://wiki.answers.com/Q/Discuss:What_is_the_IP_address_for_Facebook

这个答案是一个及时的快照,将来可能会改变。我希望能够实现一些代码,列出运行该代码时域使用的所有IP 地址。

有没有办法做到这一点?如果是这样,如何?

小智 10

没有,因为 facebook.com 的 DNS 服务器很可能只为您提供这三个服务:它根本没有告诉您其他的。

这样做的原因有很多:有些服务器在地理位置上离您很近,因此 DNS 服务器会将这些 IP 优先考虑给您。作为遏制潜在 DoS 攻击的一项措施,DNS 服务器将确保没有人能够知道 facebook.com 使用的“所有”IP。

但主要是关于负载平衡。一小时后重试,您可能会获得三个不同的IP。这是因为他们希望在所有服务器之间分散负载,因此 DNS 将优先考虑流量较少的主机,而不是流量较多的主机。