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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php 阴历-农历-转换类代码
Jan 16 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php字符串截取的简单方法
Jul 04 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
PHP引用返回用法示例
May 28 PHP
laravel 创建命令行命令的图文教程
Oct 23 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 csv操作类代码
2009/12/14 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
js 调整select 位置的函数
2008/02/21 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
javascript实现计算器功能
2020/03/30 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
python os模块在系统管理中的应用
2020/06/22 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
青年文明号服务承诺
2014/03/31 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers