2013-03-08 89 views
0

有什么办法让一个给定网站的所有IP地址?如何获取网站的所有IP地址?

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

+0

您是否需要远程站点或您的站点的所有IP? – hek2mgl 2013-03-08 17:11:46

+0

你是什么意思所有的IP地址?它收到的所有访问或该网站中的所有文本IP? – 2013-03-08 17:12:37

+0

其实,我在两种情况下工作,万一它是你的,并且不是这样! – ProXamer 2013-03-08 17:13:04

回答

3

使用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); 

gethostbynamel还规定,如果你只在IPv4地址有兴趣的一个简化的接口。

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

+0

感谢phihag,但我正在测试dns_get_record,它只给我一个IP地址 – ProXamer 2013-03-08 17:21:08

+1

@MEznati有什么域?可能只有一个地址分配给该域名,或者您的名称服务器可能会遗漏其他地址。 – phihag 2013-03-08 17:21:40

+0

你知道有多少网站使用ipv6? – hek2mgl 2013-03-08 17:22:03

1

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(这是专门设计的)。