PHP获取真实客户端的真实IP


Posted in PHP onMarch 07, 2017

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。

HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。

$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP

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

$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

三个值区别如下:

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

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
$ip = '';
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_FROM', 'REMOTE_ADDR') as $v) {
  if (isset($_SERVER[$v])) {
    if (! preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $_SERVER[$v])) {
        continue;
  } 
     $ip = $_SERVER[$v];
  }
}
uset($ip,$v);

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP 加密解密内部算法
Apr 22 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
php学习笔记之面向对象
Nov 08 PHP
php的sso单点登录实现方法
Jan 08 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 PHP
基于PHP实现发微博动态代码实例
Dec 11 PHP
详解Laravel服务容器的优势
May 29 PHP
php实现简单加入购物车功能
Mar 07 #PHP
mac os快速切换多个PHP版本的方法
Mar 07 #PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
Mar 06 #PHP
PHP实现添加购物车功能
Mar 06 #PHP
PHP自动补全表单的两种方法
Mar 06 #PHP
PHP中for循环与foreach的区别
Mar 06 #PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 #PHP
You might like
php简单的会话类代码
2011/08/08 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
简单介绍Python中的len()函数的使用
2015/04/07 Python
python之PyMongo使用总结
2017/05/26 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
How to spawning asynchronous work in J2EE
2016/08/29 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
市场营销专业推荐信
2013/11/03 职场文书
应届行政管理专业个人自我评价
2013/12/28 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
安全先进班组材料
2014/12/26 职场文书
现场施工员岗位职责
2015/04/11 职场文书