腾讯IP地址API的使用

2010-11-16 13:58:24 by 【6yang】, 70 visits, 收藏 | 返回

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress

返回的是数据格式为:var IPData = new Array(“114.218.183.139″,”",”江苏省”,”苏州市”);

使用JS代码进行调取:

<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"></script>
 
<script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);</script>

使用PHP解析的方法:(貌似不能用)

在开始讲解前需要需要先讲解一下PHP获取IP地址的方法:

function getIpAdress(){
 //this code is from phpwind
 if($_SERVER['HTTP_X_FORWARDED_FOR']){
     $onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
 } elseif($_SERVER['HTTP_CLIENT_IP']){
     $onlineip = $_SERVER['HTTP_CLIENT_IP'];
 } else{
  $onlineip = $_SERVER['REMOTE_ADDR'];
 }
 return $onlineip;
}
function getMyIpAdress(){
 //thin code is from discuz
 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
  $onlineip = getenv('HTTP_CLIENT_IP');
 } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
  $onlineip = getenv('HTTP_X_FORWARDED_FOR');
 } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
  $onlineip = getenv('REMOTE_ADDR');
 } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
  $onlineip = $_SERVER['REMOTE_ADDR'];
 }
 return $onlineip;
}

上述代码中,需要做下解释的是以下三中获取IP地址的方法:

$_SERVER['HTTP_CLIENT_IP']:代理端的IP(有可能存在,可伪造)

$_SERVER['HTTP_X_FORWARDED_FOR']:使用代理前的原始IP,有可能存在,可伪造。如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

$_SERVER['REMOTE_ADDR']:是你的客户端跟服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。不可被修改。

 由于$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']都是存在HTTP的Header中,是可以用来伪造。

function getIpPlace(){
 //use file_get_contents()
 $cookie = $_GET['cookie'];
 $HttpReferrer = $_SERVER['HTTP_REFERER'];
 $HttpClientIP = $_SERVER['HTTP_CLIENT_IP'];
 $RemAddr = $_SERVER['REMOTE_ADDR'];
 $XForward = $_SERVER['HTTP_X_FORWARDED_FOR'];
 $opts = array(
 'http'=>array(
  'user-agent'=>$_SERVER['HTTP_USER_AGENT'],
  'method'=>"GET",
  'header'=>"Content-type: application/x-www-form-urlencoded

".
   "Referer:".$HttpReferrer."

".
   "Cookie:".$cookie."

".
   "X_FORWARDED_FOR:".$XForward."

".
   "CLIENT_IP:".$HttpClientIP."

".
   "

",
  )
 );
 $cxContext = stream_context_create($opts);
 $ip=file_get_contents("http://fw.qq.com/ipaddress",false,$cxContext);
 $ip=str_replace('"',' ',$ip);
 $ip2=explode("(",$ip);
 $a=substr($ip2[1],0,-2);
 $b=explode(",",$a);
 return $b;
}

可以看到上面返回的还是服务器的IP地址,所以腾讯的IP地址查询的是$_SERVER['REMOTE_ADDR'],目前还没有办法对其修改。另:

新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js

新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42

搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson

搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8

搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip

分享到:
share

    图片原图

    loading

    loading