使用PHP检查IPv4 / IPv6地址是否已启动

时间:2017-04-08 18:13:34

标签: php linux ping ipv6 ipv4

我有一个IPv4地址。防爆。 172.19.20.21

我曾经这样做过

$fs = @fsockopen($ip,$port,$errno,$errstr,3);
if( !$fs ){
  $error = 'SSC is down';
  return Redirect::to('/')->with('error', $error )
  ->withInput(Request::except('password'));
}

完美无缺。

现在,我有一个IPv6地址Ex。 3000::1

if ((strpos($ip, ":") > -1)){

     // Code for IPv6 check
    $fs = @fsockopen($ip,$port,$errno,$errstr,3);
    if( !$fs ){
      $error = 'SSC is down';
      return Redirect::to('/')->with('error', $error )
      ->withInput(Request::except('password'));
    }

}else{

    // Code for IPv4 check
    $fs = @fsockopen($ip,$port,$errno,$errstr,3);
    if( !$fs ){
      $error = 'SSC is down';
      return Redirect::to('/')->with('error', $error )
      ->withInput(Request::except('password'));
    }
}

我可以在上面使用此代码吗?或者我需要寻找其他IPv6解决方案?

1 个答案:

答案 0 :(得分:1)

解析IP地址的内置方法是inet_pton()

  

此函数转换人类可读的IPv4或IPv6地址(如果是PHP   在启用IPv6支持的情况下构建到地址系列中   适当的32位或128位二进制结构。

例如,要确定格式,请计算结果字节:

strlen(inet_pton($ip))
4 bytes = 32 bits = IPv4
16 bytes = 128 bits = IPv6

(但是,在您的确切用例中,首先需要解释的原因尚不清楚。)