如何获取真实IP

/*获取真实IP/*获取真实IP

**********************************/

function GetIp(){

$realip = ‘‘;

$unknown = ‘unknown‘;

if (isset($_SERVER)){

if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && !empty($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR‘], $unknown)){

$arr = explode(‘,‘, $_SERVER[‘HTTP_X_FORWARDED_FOR‘]);

foreach($arr as $ip){

$ip = trim($ip);

if ($ip != ‘unknown‘){

$realip = $ip;

break;

}

}

}else if(isset($_SERVER[‘HTTP_CLIENT_IP‘]) && !empty($_SERVER[‘HTTP_CLIENT_IP‘]) && strcasecmp($_SERVER[‘HTTP_CLIENT_IP‘], $unknown)){

$realip = $_SERVER[‘HTTP_CLIENT_IP‘];

}else if(isset($_SERVER[‘REMOTE_ADDR‘]) && !empty($_SERVER[‘REMOTE_ADDR‘]) && strcasecmp($_SERVER[‘REMOTE_ADDR‘], $unknown)){

$realip = $_SERVER[‘REMOTE_ADDR‘];

}else{

$realip = $unknown;

}

}else{

if(getenv(‘HTTP_X_FORWARDED_FOR‘) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR‘), $unknown)){

$realip = getenv("HTTP_X_FORWARDED_FOR");

}else if(getenv(‘HTTP_CLIENT_IP‘) && strcasecmp(getenv(‘HTTP_CLIENT_IP‘), $unknown)){

$realip = getenv("HTTP_CLIENT_IP");

}else if(getenv(‘REMOTE_ADDR‘) && strcasecmp(getenv(‘REMOTE_ADDR‘), $unknown)){

$realip = getenv("REMOTE_ADDR");

}else{

$realip = $unknown;

}

}

$realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;

return $realip;

}

扩展函数:

getenv     获取环境变量的值

strcasecmp     二进制安全比较字符串

strcmp     二进制安全比较字符(注意区分大小写)

详解

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址

2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关

3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

if ($_SERVER[‘HTTP_X_FORWARDED_FOR‘] && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_X_FORWARDED_FOR‘])) {

$onlineip = $_SERVER[‘HTTP_X_FORWARDED_FOR‘];

} elseif  ($_SERVER[‘HTTP_CLIENT_IP‘]  && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_CLIENT_IP‘])) {

$onlineip = $_SERVER[‘HTTP_CLIENT_IP‘];

}

获取用户IP地址的三个属性的区别 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

一、没有使用代理服务 器的情况:

REMOTE_ADDR = 您的 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情 况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

****/*获取真实IP
**********************************/

function GetIp(){

$realip = ‘‘;

$unknown = ‘unknown‘;

if (isset($_SERVER)){

if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && !empty($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR‘], $unknown)){

$arr = explode(‘,‘, $_SERVER[‘HTTP_X_FORWARDED_FOR‘]);

foreach($arr as $ip){

$ip = trim($ip);

if ($ip != ‘unknown‘){

$realip = $ip;

break;

}

}

}else if(isset($_SERVER[‘HTTP_CLIENT_IP‘]) && !empty($_SERVER[‘HTTP_CLIENT_IP‘]) && strcasecmp($_SERVER[‘HTTP_CLIENT_IP‘], $unknown)){

$realip = $_SERVER[‘HTTP_CLIENT_IP‘];

}else if(isset($_SERVER[‘REMOTE_ADDR‘]) && !empty($_SERVER[‘REMOTE_ADDR‘]) && strcasecmp($_SERVER[‘REMOTE_ADDR‘], $unknown)){

$realip = $_SERVER[‘REMOTE_ADDR‘];

}else{

$realip = $unknown;

}

}else{

if(getenv(‘HTTP_X_FORWARDED_FOR‘) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR‘), $unknown)){

$realip = getenv("HTTP_X_FORWARDED_FOR");

}else if(getenv(‘HTTP_CLIENT_IP‘) && strcasecmp(getenv(‘HTTP_CLIENT_IP‘), $unknown)){

$realip = getenv("HTTP_CLIENT_IP");

}else if(getenv(‘REMOTE_ADDR‘) && strcasecmp(getenv(‘REMOTE_ADDR‘), $unknown)){

$realip = getenv("REMOTE_ADDR");

}else{

$realip = $unknown;

}

}

$realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;

return $realip;

}

扩展函数:

getenv     获取环境变量的值

strcasecmp     二进制安全比较字符串

strcmp     二进制安全比较字符(注意区分大小写)

详解

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址

2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关

3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

if ($_SERVER[‘HTTP_X_FORWARDED_FOR‘] && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_X_FORWARDED_FOR‘])) {

$onlineip = $_SERVER[‘HTTP_X_FORWARDED_FOR‘];

} elseif  ($_SERVER[‘HTTP_CLIENT_IP‘]  && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_CLIENT_IP‘])) {

$onlineip = $_SERVER[‘HTTP_CLIENT_IP‘];

}

获取用户IP地址的三个属性的区别 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

一、没有使用代理服务 器的情况:

REMOTE_ADDR = 您的 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情 况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。******************************/

function GetIp(){

$realip = ‘‘;

$unknown = ‘unknown‘;

if (isset($_SERVER)){

if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && !empty($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR‘], $unknown)){

$arr = explode(‘,‘, $_SERVER[‘HTTP_X_FORWARDED_FOR‘]);

foreach($arr as $ip){

$ip = trim($ip);

if ($ip != ‘unknown‘){

$realip = $ip;

break;

}

}

}else if(isset($_SERVER[‘HTTP_CLIENT_IP‘]) && !empty($_SERVER[‘HTTP_CLIENT_IP‘]) && strcasecmp($_SERVER[‘HTTP_CLIENT_IP‘], $unknown)){

$realip = $_SERVER[‘HTTP_CLIENT_IP‘];

}else if(isset($_SERVER[‘REMOTE_ADDR‘]) && !empty($_SERVER[‘REMOTE_ADDR‘]) && strcasecmp($_SERVER[‘REMOTE_ADDR‘], $unknown)){

$realip = $_SERVER[‘REMOTE_ADDR‘];

}else{

$realip = $unknown;

}

}else{

if(getenv(‘HTTP_X_FORWARDED_FOR‘) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR‘), $unknown)){

$realip = getenv("HTTP_X_FORWARDED_FOR");

}else if(getenv(‘HTTP_CLIENT_IP‘) && strcasecmp(getenv(‘HTTP_CLIENT_IP‘), $unknown)){

$realip = getenv("HTTP_CLIENT_IP");

}else if(getenv(‘REMOTE_ADDR‘) && strcasecmp(getenv(‘REMOTE_ADDR‘), $unknown)){

$realip = getenv("REMOTE_ADDR");

}else{

$realip = $unknown;

}

}

$realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;

return $realip;

}

扩展函数:

getenv     获取环境变量的值

strcasecmp     二进制安全比较字符串

strcmp     二进制安全比较字符(注意区分大小写)

详解

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址

2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关

3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

if ($_SERVER[‘HTTP_X_FORWARDED_FOR‘] && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_X_FORWARDED_FOR‘])) {

$onlineip = $_SERVER[‘HTTP_X_FORWARDED_FOR‘];

} elseif  ($_SERVER[‘HTTP_CLIENT_IP‘]  && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘,$_SERVER[‘HTTP_CLIENT_IP‘])) {

$onlineip = $_SERVER[‘HTTP_CLIENT_IP‘];

}

获取用户IP地址的三个属性的区别 (HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

一、没有使用代理服务 器的情况:

REMOTE_ADDR = 您的 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情 况:Transparent Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

时间: 2024-07-31 14:33:07

如何获取真实IP的相关文章

nginx 后端获取真实ip

nginx前端配置 server {listen 80;server_name blog.jinchuang.org; access_log logs/blog.access.log;error_log logs/blog.error.log;location / {proxy_pass http://dis ;                    proxy_set_header Host $host;                    proxy_set_header X-Real-I

阿里云SLB后Nginx、Tomcat获取真实IP

一.SLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加装. 查看是否安装此模块:./nginx -V 如没有安装此模块,需重新编译nginx增加 --with-http_realip_module 1.阿里云SLB需要开启获取真实IP(默认已开启) 2.修改Nginx配置文件nginx.conf 添加: http { log_format main '

获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址

/** * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址; * @Title: getIpAddress * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param request * @param @return * @param @throws IOException 参数 * @return String 返回类型 * @throws */ public String getIpAddress(HttpServletR

nginx反向代理tomcat日志获取真实IP

今天测试一下nginx反向代理功能时,让tomcat日志里获取用户真实IP地址,谷歌了一下,都是一篇文章的内容,复制了tomcat配置文件中的要修改的内容,可怎么也获取不到,神奇了就!无奈之下,仔细读每行复制的内容,发现问题了,估计都要是搜索到那篇文章的话,都得无法获取真实IP地址,就一个小小的地方.开始检查配置内容: (1)nigix  nginx.conf配置文件中: proxy_set_header  Host $host; proxy_set_header  X-Real-IP $rem

nginx前端负载,后端apache获取真实IP设置

原文链接: nginx前端负载,后端apache获取真实IP设置 参考文献: 前端Nginx,后端Apache获取用户真实IP地址  按照第二种方法设置不成功! 网站最前端是nginx,做的PROXY来转发请求到后端的apache上,所以获取的IP 都是NGINX PROXY 机器的IP,这对于分析和记录apache日志等很多基于IP判断的PHP程序都会出现一系列的问题,经过以下两处理便可让apache获取 正式的访问地址:1.修改NGINX的配置文件NGINX.CONF 在里面加上 proxy

【转载】JSP 获取真实IP地址的代码

JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. 但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP. 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的

JSP 获取真实IP地址的代码

[转载]JSP 获取真实IP地址的代码 JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的. 但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP. 经过代理以后,由于在客户端和服务之间增加

百度云BLB后NGINX、TOMCAT获取真实IP

一.BLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加装. 查看是否安装此模块:./nginx -V 如没有安装此模块,需重新编译nginx增加 --with-http_realip_module 1.百度云BLB需要开启获取真实IP(默认已开启) 2.修改Nginx配置文件nginx.conf 添加: http { log_format main '

003-Nginx 设置Header 获取真实IP

1.X-Forwarded-For的定义: X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项.它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍. 标准格式如下: X-Forwarded-For: client1, proxy1, proxy2 从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端i