真正的男子汉不是争凶斗狠 而应该是用胸膛去包容 用肩膀去支撑

IPv6地址判断

技术文档 9073浏览 0评论

PHP代码:

class ipv6
{
 function is_ipv6($ip = "")
 {
   if ($ip == "")
   {
   $ip = ipv6::get_ip();
   }
   if (substr_count($ip,":") > 0 && substr_count($ip,".") == 0){
    return true;
   } else {
    return false;
   }
 }
 
 /*
 * Detect if an IP is IPv4
 *
 * @param ip adresse ip ? 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 ? d?compresser
 * @return ip adresse IP IPv6 d?compress?
 */
 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 ? compresser
 * @return ip adresse IP IPv6 compress?
 */
 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;
 }
}

调用实例:

$ipinfo=(ipv6::is_ipv6())? "IPv6":"IPv4";    //判断是否是IPv6访问
$ip=ipv6::get_ip();                          //获得当前访问IP地址

ASP代码:

Function  getIP()    
Dim   strIPAddr    
If   Request.ServerVariables("HTTP_X_FORWARDED_FOR")   = ""   OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),"unknown") > 0 Then    
  strIPAddr   =   Request.ServerVariables("REMOTE_ADDR")    
ElseIf  InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",") >0 Then    
  strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),1,InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",")-1)    
ElseIf  InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),":")>0  Then    
  strIPAddr   =   Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   1,   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),";")-1)    
Else    
  strIPAddr   =   Request.ServerVariables("HTTP_X_FORWARDED_FOR")    
End   If    
  getIP   =   Trim(Mid(strIPAddr,1,30))    
End   Function 

Function  ISIPv6(ip)
  if (ip="") then ip = getIP()
  if (instr(ip,":")>0  and instr(ip,".")=0) then
    ISIPv6=true
  else
    ISIPv6=false
  end if
End Function

Function ISIPv4(ip)
  if ISIPv6(ip) then
     ISIPv4=false
  else
     ISIPv4=true
  end if
End Function

Function IIf(Condition, ValueIfTrue, ValueIfFalse)         //ASP的三目运算符函数
    If Condition Then  
        IIf = ValueIfTrue  
    Else  
        IIf = ValueIfFalse  
    End if 
End Function

调用实例:

IPv6=ISIPv6(getIP())                                    //判断是否是IPv6访问
ipinfo=IIf(IPv6,"IPv6","IPv4")                          //显示是IPv6还是IPv4
ip=getIP()

转载请注明:自由的风 » IPv6地址判断

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 请问一下,服务器是自己的需要如何设置网络环境,我的IPV6使用ND方式

    无日夜雨2011-05-30 16:45 回复
    • @无日夜雨
      不太明白你的意思。
      这个是判断访问用户是否在使用IPv6访问您的网站,然后决定跳转的方式。

      自由的风2011-05-30 20:41 回复