检查ip6是否已关闭

时间:2016-06-06 01:39:08

标签: php codeigniter

我正在尝试使用php检查我的代码中是否未连接ip6。我现在的想法是计算加载是否要连接。我尝试使用此代码。

$file = file_get_contents('http://ip6.me/');

// Trim IP based on HTML formatting
$pos = strpos( $file, '+3' ) + 3;
$ip = substr( $file, $pos, strlen( $file ) );

// Trim IP based on HTML formatting
$pos = strpos( $ip, '</' );
$ip = substr( $ip, 0, $pos );
$ipaddress = $ip;
$ip_get = explode('.',$ipaddress);
如果能得到ip地址,这对我来说很好。但有一段时间ip6下降,它加载到很多。检查ip6是否已关闭的最佳方法是什么?我尝试计算浏览器的负载,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

我会通过IPv6 ping服务器。在linux上,您可以使用以下代码。

exec('ping -6 -c 1 2001:4860:4860::8888', $lines, $exit); // ping will return 0 if ping succeeds
if($exit == 0) {
    // up
    echo "up\n";
} else {
    //down
    echo "down\n";
}

修改

Samuel的回答测试TCP端口是否可通过IPv6访问。在某些情况下,由于防火墙配置,只有其中一种方法可以工作。

答案 1 :(得分:1)

您可以使用本机PHP方法socket_connect

bool socket_connect ( resource $socket , string $address [, int $port = 0 ] )
  

使用套接字资源套接字启动到地址的连接,   它必须是使用socket_create()创建的有效套接字资源。

   // Creating new socket
   $socket = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP)
      or die("Unable to create socket\n");

    // Trying to connect, will return True on success     
    $res = socket_connect($socket, $host, $port))