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 10 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP中redis的用法深入解析
Feb 20 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
标准PHP的AES加密算法类
Mar 12 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
php弹出提示框的是实例写法
Sep 26 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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的FTP学习(三)
2006/10/09 PHP
php网页病毒清除类
2014/12/08 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
Prototype Selector对象学习
2009/07/23 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
Python写的服务监控程序实例
2015/01/31 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python默认参数调用方法解析
2020/02/09 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
keras topN显示,自编写代码案例
2020/07/03 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
高三上学期学习自我评价
2014/04/23 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
推普标语口号大全
2015/12/26 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Python Matplotlib库实现画局部图
2021/11/17 Python