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将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
js 匿名调用实现代码
2009/06/19 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
java直接调用python脚本的例子
2014/02/16 Python
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
医学生个人求职信范文
2014/02/07 职场文书
自立自强的名人事例
2014/02/10 职场文书
委托书模板
2014/04/04 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
Django框架中模型的用法
2022/06/10 Python