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 相关文章推荐
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
PHP常用字符串函数用法实例总结
Jun 04 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
Jquery之美中不足小结
2011/02/16 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
跟老齐学Python之网站的结构
2014/10/24 Python
python简单文本处理的方法
2015/07/10 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
如何选择使用结构还是类
2014/05/30 面试题
房地产财务部员工岗位职责
2014/03/12 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android