PHP如何才能获取真实IP
时间:2022-06-15 [网络编程]作者:fabuyuan 浏览:3 次
在PHP中,常见获取请求IP的方式一般是通过3个超全局变量,不过很显然三种获取IP的方式并不完全可靠。
$_SERVER['REMOTE_ADDR']; // 客户端与服务器握手IP,如果使用代理则会获取到代理IP $_SERVER['HTTP_CLIENT_IP']; // 代理服务器发送的HTTP头(可伪造) $_SERVER['HTTP_X_FORWARDED_FOR']; // 用户是在哪个IP使用的代理(可伪造)
如果域名没有经过代理,一般稳妥的方式是 REMOTE_ADDR,如果是海外网络最稳妥的方式是云厂商提供可靠的源IP获取方式,如谷歌云提供的:
当没有出现伪造IP时,X-forwarded-For 一般是客户端真实IP,负载均衡 IP
当出现伪造IP时,谷歌云将伪造的内容进行前置,格式是 <伪造内容>,客户端真实IP,负载均衡 IP
所以无论是否伪造,我们都可以通过逗号切割字符串,找到倒数第二个X-forwarded-for的值,就可以获取到真实客户端IP。
当然,如果域名云厂商没有提供类似的域名信息,我们就无法简单通过超全局变量进行获取了。
当域名云厂商没有提供相应的请求源IP信息时,这时我们也可以通过服务端交互双方协商一种确认机制。
类似:在HTTP请求头加入源IP信息进行判断,由于是服务端之间的通信过程,伪造方无法知道伪造的具体信息内容,因此通常情况下这样的交互是可靠的。
判断逻辑过程
服务端A: HTTP请求头加入变量 MY_REALIP_c32fsjk234 => “1.2.3.4”,这时需要注意,变量名称尽量不要太简单,并且最好双方约定一个随机密钥作为变量名称,类似 MY_REALIP_c32fsjk234
接受请求端B: 通过 $_SERVER[‘MY_REALIP_c32fsjk234’] 判断请求头是否包含 MY_REALIP_c32fsjk234 变量,如果有,获取相应的IP作为真实IP。
原文链接:https://blog.csdn.net/panguangyuu/article/details/122211682
推荐阅读:
php教程
以上就是PHP如何才能获取真实IP的详细内容,更多请关注站长家园其它相关文章!
本文标签: IPphp
转载请注明来源:PHP如何才能获取真实IP
本文永久链接地址:https://www.adminjie.com/post/13470.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- app是什么应用程序的简称
- 华为dubal20是什么型号
- 小程序大小超限除了分包还能怎么做?如何避免和解决大小限制?
- ana an00华为是什么型号
- 电脑显示信号线无连接是什么意思
- html5中onclick是什么意思
- 超清视效是什么意思
- vivov1818a是什么手机型号
- html5的标题标记一共有几个等级

- 最新文章
-
-
linux怎么删除乱码文件名的文件
删除方法:1、利用“ls-i”命令获取文件的节点号,ls命令用于显示指定工作目录下之内容;2、通过获取到的文件节点号利用find命令即可删除指定的文件,语法为...
-
linux怎么查看安装的软件在哪个目录
在linux中,可以利用whereis命令查看安装的软件在哪个目录,该命令用于查找文件,也会待在特定的目录中查找符合条件的文件,但是只能用于查找二进制文件、源代...
-
linux怎么查看错误日志
在linux中,可以利用tail命令查看错误日志,该命令用于查看文件的内容,语法为“tail-f/var/log/messages”;参数“-f”表示把文件...
-
linux系统是免费的吗
linux系统是免费的;linux全称是“GNU/Linux”,是一种自由和开放源码的类Unix操作系统,其不同于windows的不可更改性,可以对源码进行修改...
-
linux的结构是什么
linux系统的结构是四个部分:1、内核,操作系统的核心负责管理系统的进程、内存、设备驱动程序等;2、shell,系统的用户界面,提供了用户与内核进行交互操作的...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-