//===================================
//
//功能:IP地址获取真实地址函数
//参数:$ip-IP地址
//
//===================================
functionconvertip($ip){
$dat_path='../QQWry.Dat';
if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/",$ip)){
return'IPAddressError';
}
if(!$fd=@fopen($dat_path,'rb')){
return'IPdatefilenotexistsoraccessdenied';
}
$ip=explode('.',$ip);
$ipNum=$ip[0]*16777216+$ip[1]*65536+$ip[2]*256+$ip[3];
$DataBegin=fread($fd,4);
$DataEnd=fread($fd,4);
$ipbegin=implode('',unpack('L',$DataBegin));
if($ipbegin
$ipend=implode('',unpack('L',$DataEnd));
if($ipend
$ipAllNum=($ipend-$ipbegin)/7+1;
$BeginNum=0;
$EndNum=$ipAllNum;
while($ip1num>$ipNum||$ip2num
$Middle=intval(($EndNum+$BeginNum)/2);
fseek($fd,$ipbegin+7*$Middle);
$ipData1=fread($fd,4);
if(strlen($ipData1)
fclose($fd);
return'SystemError';
}
$ip1num=implode('',unpack('L',$ipData1));
if($ip1num
if($ip1num>$ipNum){
$EndNum=$Middle;
continue;
}
$DataSeek=fread($fd,3);
if(strlen($DataSeek)
fclose($fd);
return'SystemError';
}
$DataSeek=implode('',unpack('L',$DataSeek.chr(0)));
fseek($fd,$DataSeek);
$ipData2=fread($fd,4);
if(strlen($ipData2)
fclose($fd);
return'SystemError';
}
$ip2num=implode('',unpack('L',$ipData2));
if($ip2num
if($ip2num
if($Middle==$BeginNum){
fclose($fd);
return'Unknown';
}
$BeginNum=$Middle;
}
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(1)){
$ipSeek=fread($fd,3);
if(strlen($ipSeek)
fclose($fd);
return'SystemError';
}
$ipSeek=implode('',unpack('L',$ipSeek.chr(0)));
fseek($fd,$ipSeek);
$ipFlag=fread($fd,1);
}
if($ipFlag==chr(2)){
$AddrSeek=fread($fd,3);
if(strlen($AddrSeek)
fclose($fd);
return'SystemError';
}
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)
fclose($fd);
return'SystemError';
}
$AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else{
fseek($fd,-1,SEEK_CUR);
}
while(($char=fread($fd,1))!=chr(0))
$ipAddr2.=$char;
$AddrSeek=implode('',unpack('L',$AddrSeek.chr(0)));
fseek($fd,$AddrSeek);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1.=$char;
}else{
fseek($fd,-1,SEEK_CUR);
while(($char=fread($fd,1))!=chr(0))
$ipAddr1.=$char;
$ipFlag=fread($fd,1);
if($ipFlag==chr(2)){
$AddrSeek2=fread($fd,3);
if(strlen($AddrSeek2)
fclose($fd);
return'SystemError';
}
$AddrSeek2=implode('',unpack('L',$AddrSeek2.chr(0)));
fseek($fd,$AddrSeek2);
}else{
fseek($fd,-1,SEEK_CUR);
}
while(($char=fread($fd,1))!=chr(0)){
$ipAddr2.=$char;
}
}
fclose($fd);
if(preg_match('/http/i',$ipAddr2)){
$ipAddr2='';
}
$ipaddr="$ipAddr1$ipAddr2";
$ipaddr=preg_replace('//is','',$ipaddr);
$ipaddr=preg_replace('/^s*/is','',$ipaddr);
$ipaddr=preg_replace('/s*$/is','',$ipaddr);
if(preg_match('/http/i',$ipaddr)||$ipaddr==''){
$ipaddr='Unknown';
}
return$ipaddr;
}
?>