Thaiadmin

::Sample usage of IPv6 and IPv4 with PHP::

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

บุคคลทั่วไป

::Sample usage of IPv6 and IPv4 with PHP::
« เมื่อ: 21 ตุลาคม 2008, 09:12:35 »
IPv6 Detection class

@copyright 2002-2003 by Dynamix SARL
@author Ben Yacoub Hatem <hatem@php.net>

detect if an IP is IPv6

@param ip adresse ip א tester
@return true / false

โค๊ด: [Select]
<?php

class ipv6
{

function 
is_ipv6($ip "")
{
  if (
$ip == "")
  {
     
$ip ipv6::get_ip();
  }
  if (
substr_count($ip,":") > && substr_count($ip,".") == 0){
   return 
true;
  } else {
   return 
false;
  }
}

/*
* Detect if an IP is IPv4
*
* @param ip adresse ip &#1488; tester
* @return true / false
*/
function is_ipv4($ip "")
{
  return !
ipv6::is_ipv6($ip);
}

/*
* return user IP
*
* @return IP
*/
function get_ip()
{
  return  
getenv ("REMOTE_ADDR");
}

/*
* Uncompress an IPv6 address
*
* @param ip adresse IP IPv6 &#1488; d&#1497;compresser
* @return ip adresse IP IPv6 d&#1497;compress&#1497;
*/
function uncompress_ipv6($ip ="")
{
  if (
$ip == "")
  {
   
$ip ipv6::get_ip();
  }
  if(
strstr($ip,"::" ))
  {
   
$e explode(":"$ip);
   
$s 8-sizeof($e)+1;
   foreach(
$e as $key=>$val)
   {
    if (
$val == "")
    {
     for(
$i==0;$i<=$s;$i++)
     
$newip[] = 0;
    } else {
     
$newip[] = $val;
    }
   }
   
$ip implode(":"$newip);
  }
  return 
$ip;
}

/*
* Compress an IPv6 address
*
* @param ip adresse IP IPv6 &#1488; compresser
* @return ip adresse IP IPv6 compress&#1497;
*/
function compress_ipv6($ip ="")
{
  if (
$ip == "")
  {
   
$ip ipv6::get_ip();
  }
  if(!
strstr($ip,"::" ))
  {
   
$e explode(":"$ip);
   
$zeros = array(0);
   
$result array_intersect ($e$zeros );
   if (
sizeof($result) >= 6)
   {
    if (
$e[0]==0) {$newip[] = "";}
    foreach(
$e as $key=>$val)
    {
     if (
$val !=="0")
     {
      
$newip[] = $val;
     }
    }
    
$ip implode("::"$newip);
   }
  }
  return 
$ip;
}
}

/*
*  IPv6 Compression
*/
echo " IPv6 compression : ".ipv6::compress_ipv6("0:0:0:0:0:0:0:1")."
n"
;

/*
* IPv6 Uncompression
*/
echo "IPv6 Uncompression : ".ipv6::uncompress_ipv6("::1")."
n"
;

/*
* Tester IPv6
*/
echo "Your IP is ".ipv6::get_ip()." et You're using : ";
echo (
ipv6::is_ipv6())? "IPv6":"IPv4";
?>



ออฟไลน์ sf_alpha

  • *****
  • 3,936
  • 89
  • เพศ: ชาย
  • The SF-Alpha
    • My Profiles
Re: ::Sample usage of IPv6 and IPv4 with PHP::
« ตอบกลับ #1 เมื่อ: 21 ตุลาคม 2008, 12:59:33 »
น่าจะเป็น ipv6 checking and compression มากกว่า

เวลาใช้งานจริง ๆ อาจจะวุ่นกว่าหน่อย ยกตัวอย่างเช่นการ open socket ด้วย AF_INET6 ที่ [::]

IPV4 มันก็จะมาเป็น ::ffff:x.x.x.x เลย แล้วถ้าจะ bind ซ้อนด้วย AF_INET4 ที่ 0.0.0.0 ไม่ได้ ยกเว้นว่าตอน bind AF_INET6 ใส่ Flags IPV6ONLY แล้ว bind แยก v4,v6

เหอๆ วุ่นวายแท้ มีรายละเอียดพวกนี้อีกตรึม
« แก้ไขครั้งสุดท้าย: 21 ตุลาคม 2008, 13:16:08 โดย sf_alpha »