作者:真正的爱情是什么2010 | 来源:互联网 | 2018-03-23 04:20
类文件
>24;
if ($b1<0) $b1+=0x100;
$b2=($Int & 0x00ff0000)>>16;
if ($b2<0) $b2+=0x100;
$b3=($Int & 0x0000ff00)>>8;
if ($b3<0) $b3+=0x100;
$b4= $Int & 0x000000ff;
if ($b4<0) $b4+=0x100;
$Ip=$b1.&#39;.&#39;.$b2.&#39;.&#39;.$b3.&#39;.&#39;.$b4;
return $Ip;
}
class TQQwry
{
var $StartIP = 0;
var $EndIP = 0;
var $Country = &#39;&#39;;
var $Local = &#39;&#39;;
var $CountryFlag = 0; // 标识 Country位置
// 0x01,随后3字节为Country偏移,没有Local
// 0x02,随后3字节为Country偏移,接着是Local
// 其他,Country,Local,Local有类似的压缩。可能多重引用。
var $fp;
var $FirstStartIp = 0;
var $LastStartIp = 0;
var $EndIpOff = 0 ;
function getStartIp ( $RecNo ) {
$offset = $this->FirstStartIp + $RecNo * 7 ;
@fseek ( $this->fp , $offset , SEEK_SET ) ;
$buf = fread ( $this->fp , 7 ) ;
$this->EndIpOff = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
$this->StartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
return $this->StartIp ;
}
function getEndIp ( ) {
@fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;
$buf = fread ( $this->fp , 5 ) ;
$this->EndIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->CountryFlag = ord ( $buf[4] ) ;
return $this->EndIp ;
}
function getCountry ( ) {
switch ( $this->CountryFlag ) {
case 1:
case 2:
$this->Country = $this->getFlagStr ( $this->EndIpOff+4) ;
//echo sprintf(&#39;EndIpOffset=(%x)&#39;,$this->EndIpOff );
$this->Local = ( 1 == $this->CountryFlag )? &#39;&#39; : $this->getFlagStr ( $this->EndIpOff+8);
break ;
default :
$this->Country = $this->getFlagStr ($this->EndIpOff+4) ;
$this->Local = $this->getFlagStr ( ftell ( $this->fp )) ;
}
}
function getFlagStr ( $offset )
{
$flag = 0 ;
while ( 1 ){
@fseek ( $this->fp , $offset , SEEK_SET ) ;
$flag = ord ( fgetc ( $this->fp ) ) ;
if ( $flag == 1 || $flag == 2 ) {
$buf = fread ($this->fp , 3 ) ;
if ($flag == 2 ){
$this->CountryFlag = 2 ;
$this->EndIpOff = $offset - 4 ;
}
$offset = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);
}else{
break ;
}
}
if ( $offset <12 )
return &#39;&#39;;
@fseek($this->fp , $offset , SEEK_SET ) ;
return $this->getStr();
}
function getStr ( )
{
$str = &#39;&#39; ;
while ( 1 ) {
$c = fgetc ( $this->fp ) ;
if ( ord ( $c[0] ) == 0 )
break ;
$str .= $c ;
}
return $str ;
}
function qqwry ($dotip) {
$nRet;
$ip = IpToInt ( $dotip );
$this->fp= @fopen($_SERVER[&#39;DOCUMENT_ROOT&#39;]."ip/IPAddr.Dat", "r");
//var_dump($this->fp);exit;
if ($this->fp == NULL) {
$szLocal= "OpenFileError";
return 1;
}
@fseek ( $this->fp , 0 , SEEK_SET ) ;
$buf = fread ( $this->fp , 8 ) ;
$this->FirstStartIp = ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->LastStartIp = ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256);
$RecordCount= floor( ( $this->LastStartIp - $this->FirstStartIp ) / 7);
if ($RecordCount <= 1){
$this->Country = "FileDataError";
fclose ( $this->fp ) ;
return 2 ;
}
$RangB= 0;
$RangE= $RecordCount;
// Match ...
while ($RangB <$RangE-1)
{
$RecNo= floor(($RangB + $RangE) / 2);
$this->getStartIp ( $RecNo ) ;
if ( $ip == $this->StartIp )
{
$RangB = $RecNo ;
break ;
}
if ( $ip > $this->StartIp)
$RangB= $RecNo;
else
$RangE= $RecNo;
}
$this->getStartIp ( $RangB ) ;
$this->getEndIp ( ) ;
if ( ( $this->StartIp <= $ip ) && ( $this->EndIp >= $ip ) ){
$nRet = 0 ;
$this->getCountry ( ) ;
//转换
$this->Local = str_replace("(我们一定要解放台湾!!!)", "", $this->Local);
}else {
$nRet = 3 ;
$this->Country = &#39;未知&#39; ;
$this->Local = &#39;&#39; ;
}
fclose ( $this->fp ) ;
return $nRet ;
}
}
function get_address($ip)
{
$wry = new TQQwry ;
$nRet = $wry->qqwry ( $ip );
print_r($nRet);exit;
//可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
$strRet=$wry->Country.$wry->Local;
$strRet=str_replace("ETE.CN","",$strRet);
return $strRet;
//return $wry->Country;
}
function get_country($ip)
{
$wry = new TQQwry ;
$nRet = $wry->qqwry ( $ip );
//可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
$strRet=$wry->Country;
$strRet=str_replace("ETE.CN","",$strRet);
return $strRet;
}
function get_ip_array($ip){
$wry = new TQQwry ;
$nRet = $wry->qqwry ( $ip );
//可以利用 $nRet做一些事情,我是让他自动记录未知IP到一个表,代码就不写了。
$strRet=$wry->Country.$wry->Local;
$strRet=str_replace("ETE.CN","",$strRet);
$ar[&#39;country&#39;] = $wry->Country;
$ar[&#39;address&#39;] = $strRet;
$ar[&#39;local&#39;] = $wry->Local;
return $ar;
}
// test
var_dump( get_ip_array(&#39;173.192.132.232&#39;));
var_dump( get_ip_array(&#39;183.129.146.234&#39;));
?>
解压文件 ~ 3MB
IPAddr.rar
淘宝的ip地址API
接口说明
1. 请求接口(GET):
https://www.php1.cn/[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
"county_id":"-1","isp_id":"100017"}}
其中code的值的含义为,0:成功,1:失败。