高防IP如何获取客户端真实IP地址

发布时间:2025-03-13 点击:15
这篇文章主要介绍了关于php、java获取客户端真实ip地址的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下。
仅适用于网站类转发规则
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的ip,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的http头信息中,增加了x-forwarded-for 、x-real-ip信息。用以跟踪原有的客户端ip地址和原来客户端请求的服务器地址。
先说说这些请求头的意思
x-forwarded-for
这是一个 squid 开发的字段,只有在通过了http代理或者负载均衡服务器时才会添加该项。
格式为x-forwarded-for:client1,proxy1,proxy2,一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip。现在大部分的代理都会加上这个请求头。
x-real-ip
nginx代理一般会加上此请求头。
php获取客户端ip地方法如下
1、remote_addr
2、http_x_forwarded_for
3、http_client_ip
4、http_x_real_ip
remote_addr 是你的客户端跟你的服务器“握手”时候的ip。如果使用了“匿名代理”,remote_addr将显示代理服务器的ip。
http_client_ip 是代理服务器发送的http头。如果是“超级匿名代理”,则返回none值。同样,remote_addr也会被替换为这个代理服务器的ip。
$_server['remote_addr']; //访问端(有可能是用户,有可能是代理的)ip
$_server['http_x_forwarded_for']; //用户是在哪个ip使用的代理(有可能存在,也可以伪造)
$_server['http_client_ip']; //代理端的(有可能存在,可伪造)
一、没有使用代理服务器的情况:
remote_addr = 您的 ip
http_x_forwarded_for = 没数值或不显示
二、使用代理服务器的情况:
remote_addr = 最后一个代理服务器 ip
http_x_forwarded_for = 您的真实 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
获取客户端真实的ip地址实例:
/**
* 获取客户端ip
*/
function getclientip() {
$ip = unknown;
/*
* 访问时用localhost访问的,读出来的是“::1”是正常情况。
* ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。
* 使用ip地址访问或者关闭ipv6支持都可以不显示这个。
* */
if (isset($_server)) {
if (isset($_server[http_x_forwarded_for])) {
$ip = $_server[http_x_forwarded_for];
}elseif (isset($_server[http_x_real_ip])) {
$ip = $_server[http_x_real_ip];
}elseif (isset($_server[http_client_ip])) {
$ip = $_server[http_client_ip];
} else {
$ip = $_server[remote_addr];
}
} else {
if (getenv('http_x_forwarded_for')) {
$ip = getenv('http_x_forwarded_for');
}elseif (getenv('http_x_real_ip')) {
$ip = getenv('http_x_real_ip');
}elseif (getenv('http_client_ip')) {
$ip = getenv('http_client_ip');
} else {
$ip = getenv('remote_addr');
}
}
if(trim($ip)==::1){
$ip=127.0.0.1;
}
return $ip;
}
java获取客户端真实ip地址方法
在jsp里,获取客户端的ip地址的方法是:request.getremoteaddr(),这种方法在大部分情况下都是有效的。但是在通过了apache,squid等反向代理软件就不能获取到客户端的真实ip地址了。
下面是一个参考获取客户端ip地址的方法:public string getclientip(httpservletrequest request) { string ip = request.getheader(x-forwarded-for); if(ip == null || ip.length() == 0 || unknown.equalsignorecase(ip)) { ip = request.getheader(proxy-client-ip); } if(ip == null || ip.length() == 0 || unknown.equalsignorecase(ip)) { ip = request.getheader(wl-proxy-client-ip); } if(ip == null || ip.length() == 0 || unknown.equalsignorecase(ip)) { ip = request.getremoteaddr(); } return ip;}

张禹乔: 新手如何进行网站建设
企业网站建设有哪些具体功能?有何作用?
站长是否关心网站的老客户
绿色生态商怎样把小程序煅造变成“超级射频连
网址网站和行业网站是适合搜索推广的网站类型
香港服务器可以在国内使用吗?
企业网站页面设计五大忌讳事项
建立外贸公司网站要考虑什么因素