使用PHP获取网站IP

10

我需要使用php获取给定网站的ip地址,也就是托管该网站的服务器的ip地址。

为此,我已经使用gethostbyname('**example.com*')。当网站没有重定向时,它可以很好地工作,例如如果我使用这个函数来获取google.com,它会返回“74.125.235.20”。

当我尝试对“lappusa.com”进行操作时,它返回“lappusa.com”。然后我在浏览器中尝试了一下,它重定向到“http://lappusa.lappgroup.com/”。我检查了HTTP状态代码,它显示为200。

但是,即使网站被重定向,我仍需要获取其ip地址,例如,如果lappusa.com被重定向到lappusa.lappgroup.com,那么我需要获取重定向url的ip地址。

我该如何做?非常感谢任何帮助!


网站 lappusa.com 没有被重定向,它根本不存在。 - hakre
3个回答

14
问题不在于HTTP重定向(超出了gethostbyname的操作级别),而是lappusa.com没有解析到任何IP地址,因此无法在任何浏览器中加载。你的浏览器自动尝试添加www.。你可以在你的代码中复现这个行为。另外请注意,一个域名可以关联多个IP地址(版本4和6)。
<?php
function getAddresses($domain) {
  $records = dns_get_record($domain);
  $res = array();
  foreach ($records as $r) {
    if ($r['host'] != $domain) continue; // glue entry
    if (!isset($r['type'])) continue; // DNSSec

    if ($r['type'] == 'A') $res[] = $r['ip'];
    if ($r['type'] == 'AAAA') $res[] = $r['ipv6'];
  }
  return $res;
}

function getAddresses_www($domain) {
  $res = getAddresses($domain);
  if (count($res) == 0) {
    $res = getAddresses('www.' . $domain);
  }
  return $res;
}

print_r(getAddresses_www('lappusa.com'));
/* outputs Array (
  [0] => 66.11.155.215
) */
print_r(getAddresses_www('example.net'));
/* outputs Array (
  [0] => 192.0.43.10
  [1] => 2001:500:88:200::10
) */

它起作用了。我尝试在gethostbyname之前添加“www”,结果输出与您的函数相同。但是能否请您再解释一下?还请在您的答案中添加关闭php标记...谢谢。 - vkGunasekaran
1
@Sekar 如果文件中没有更多内容,则不需要关闭php标记(如果您关闭它,许多编辑器将坚持要求一个额外的空行,这将由php输出)。get_dns_record不仅允许您获取IPv4地址,还允许您获取IPv6地址。如果您对此不感兴趣,可以使用gethostbynamel替换getAddresses函数。 - phihag
1
好的,谢谢你的努力,也感谢你提供了gethostbynamel函数的链接,很不错。 - vkGunasekaran

0

他们使用HTML源代码中的META标签进行重定向。您需要解析实际的源代码才能捕获它。


-1
你尝试过向某个页面发送HttpRequest,然后解析响应头吗?我不确定,但它应该包含一些IP或主机信息...

是的,我尝试使用curl来检查“location”是否存在。有时候我们会看到重定向的URL,即使该属性不存在于此URL上。 - vkGunasekaran
现在我发现Curl无法捕获JavaScript重定向。那么如何检查给定的URL是否已重定向... - vkGunasekaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接