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脚本的10个技巧(1)
Oct 09 PHP
PHP之变量、常量学习笔记
Mar 27 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
php foreach 使用&(与运算符)引用赋值要注意的问题
Feb 16 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
PHP date函数常用时间处理方法
May 11 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
Nov 13 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读取MySQL数据代码
2008/06/05 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
Vue2几种常见开局方式详解
2017/09/09 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
python获取本机外网ip的方法
2015/04/15 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
用python实现刷点击率的示例代码
2019/02/21 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
升职自荐书
2019/05/09 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
MySQL事务的隔离级别详情
2022/07/15 MySQL