腾讯的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
loading