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 应用程序的安全 -- 不能违反的四条安全规则
Nov 26 PHP
PHP文件上传实例详解!!!
Jan 02 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
php实现mysql数据库备份类
2008/03/20 PHP
php绘制圆形的方法
2015/01/24 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php生成gif动画的方法
2015/11/05 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
javascript Excel操作知识点
2009/04/24 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
python开发之for循环操作实例详解
2015/11/12 Python
python中Apriori算法实现讲解
2017/12/10 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
商场经理竞聘演讲稿
2014/01/01 职场文书
求职教师自荐书
2014/06/19 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
信用卡工资证明范本
2015/06/19 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
晚会开幕词范文
2016/03/04 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python