IP地址API
来源:互联网 发布:华三交换机端口状态 编辑:程序博客网 时间:2024/05/17 01:00
IP地址API
by 尘缘 on 十一月 29th, 2010 // Filed Under → php
当我们开发了一些应用以后,可能需要限制用户程序进行分发,典型的例子就是绑定域名的App。如果用户将域名使用本地HOST解析,很有可能绕过程序的域名限制,从而绑定其它域名进行产品分发。
使用本地和服务器端IP同步验证,则可以很好的解决这个问题。
如果,使用gethostbyname取得一个域名的IP,同时再去访问一下其它外网,取得程序所在外网IP,如果两个IP不一样,则可以判断出程序的合法性。
从一些大网站取得IP是比较可行的办法。
腾讯的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>
上面的API和下面的API都可以用JS进行调用,如果想用PHP等服务器端脚本获取,可以使用正则选取的方法,但比较多余,下面的讲一下PHP直接获取客户端IP的办法。
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\r\n"
.
"Referer:"
.
$HttpReferrer
.
"\r\n"
.
"Cookie:"
.
$cookie
.
"\r\n"
.
"X_FORWARDED_FOR:"
.
$XForward
.
"\r\n"
.
"CLIENT_IP:"
.
$HttpClientIP
.
"\r\n"
.
"\r\n"
,
)
);
$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
淘宝:http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8
- ip地址查询api
- IP地址API
- JS IP地址查询API
- WIN32 API IP地址转换
- 用API获取IP地址
- IP地址 ->实际地址 ,API 查询
- IP地址 ->实际地址 ,API 查询
- 腾讯的IP地址API接口地址
- 腾讯的IP地址API接口地址
- 腾讯/新浪/搜狐IP地址API
- 淘宝IP地址库,提供API
- JAVA 调用淘宝IP地址库API
- QT获取本机IP地址API
- 查IP地址,淘宝的API
- 微软的IP helper API链接地址
- 利用Google API 进行IP地址定位
- 利用搜狗api解析ip地址
- IP Helper API 简介与设置网卡的IP地址
- 新浪 ip 地址库
- hdu-2814-Interesting Fibonacci-斐波那契循环节
- 关于 xcode5 每次修改代码,都要先clean,重新编译才有效的解决方法汇总
- 获取任务栏所有正在运行程序
- quartus时序分析文档理解与翻译(2) ——一个设置约束的例程
- IP地址API
- C++解析xml--tinyxml--DOM模型
- PHP源码加密
- mvc Razor 视图中找不到 ViewBag的定义
- inet_ntoa 和inet_addr函数
- GridView初始时加载一张图片,点击后加载另外一张大图
- 深入解析LINQ框架
- java_calendar日历的显示
- vmware linux 硬盘扩容