【问题标题】:How can I get ALL IP addresses of a web site?如何获取网站的所有 IP 地址?
【发布时间】:2013-02-24 07:46:56
【问题描述】:

有没有办法让给定网站的所有 IP 地址?

CURL 能做到吗?可以在 PHP 中使用吗?

【问题讨论】:

  • 您需要来自远程站点或您的站点的所有 IP 吗?
  • 所有IP地址是什么意思?它收到的所有访问或该网站内的所有 IP 文本?
  • 实际上,我正在处理这两种情况,万一是你的,万一不是!
  • 我的意思是所有托管本网站的 IP 地址

标签: php networking curl hosting monitoring


【解决方案1】:

使用dns_get_record,像这样:

$all_records = dns_get_record('example.com');
$ips = array();
foreach ($all_records as $r) {
    if ($r['type'] == 'A') {
        $ips[] = $r['ip'];
    }
    if ($r['type'] == 'AAAA') {
        $ips[] = $r['ipv6'];
    }
}
var_export($ips);

如果您只对 IPv4 地址感兴趣,gethostbynamel 还提供了一个简化的界面。

请注意,由于响应大小和地理偏好有限,您可能需要从多个位置多次询问此查询,以获取诸如 google.com 等常用域的所有(或大部分)地址。

【讨论】:

  • 感谢 phihag,但我正在测试 dns_get_record,它只给了我一个 IP 地址
  • @MEznati 使用什么域?可能只有一个地址分配给该域,或者您的域名服务器可能会遗漏其他地址。
  • @MEznati www.symphony.com 确实只有一个 IPv4 而没有分配给它的 IPv6 地址。几乎在所有情况下,负载均衡器都会有一个公共 IP,然后将请求分发到其后面的多个服务器。除了时间(和管理员注入的调试数据)之外,负载均衡器是不可见的。
  • @MEznati 不,这不会获取负载均衡器后面机器的 IP 地址,这根本不可能。
  • @MEznati 有几种负载平衡方式。例如,Google 使用基于 DNS 的负载平衡,这就是我以它为例的原因
【解决方案2】:

PHP 对此有一个函数:gethostbynamel()

该函数执行 DNS 查询并返回结果 IP

例子:

var_dump(gethostbynamel('google.com'));

输出

array(6) {
  [0] =>
  string(14) "173.194.70.139"
  [1] =>
  string(14) "173.194.70.113"
  [2] =>
  string(14) "173.194.70.100"
  [3] =>
  string(14) "173.194.70.138"
  [4] =>
  string(14) "173.194.70.102"
  [5] =>
  string(14) "173.194.70.101"
}

@MEznati 关于负载均衡:

有多种负载平衡方式。例如,谷歌使用基于 DNS 的负载平衡,这就是我以它为例的原因。如果正在使用某种形式的内部负载平衡 - 这意味着负载平衡器有 1 个外部 IP 并将请求重定向到内部服务器 - 您将无法获得这些内部(私有)IP(这是设计使然)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2014-12-31
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多