0x01 前言

我的网站使用了CDN,但是用上之后发现一个问题,那就是$REMOTE_ADDR并不正确,是一个CDN回源节点的IP

好在大部分CDN都会返回真实IP

现在用一个简单的PHP变量来测试一下

0x02 PHP超全局变量$_SERVER

PHP超全局变量$_SERVER,是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,这个数组中也包含了用户的请求的真实IP址址,所以我们可以利用它在使用各种cdn加速网站上进行测试。在php中,一般都是通过以下代码来获取真实IP地址,但在CDN下,此代码获取到的IP只是CDN最近一个节点的IP,并不是真实的用户IP

编写一个如下代码的PHP文件,并命名为 ip.php 并放到使用CDN加速的网站根目录下面,并在浏览器中以网址的方式打开。

以下是使用各个CDN加速后,打印出的结果,我们只列出含有真实IP地址的部份与 ‘REMOTE_ADDR’ 部份

其中:

123.123.123.123 为我自己的真实IP,只有 [HTTP_X_FORWARDED_FOR] 与 [HTTP_X_REAL_IP]  包含了真实的IP地址.

  • 百度CDN打印结果:
  • 阿里CDN打印结果:

七牛CDN打印结果:

  • 又拍云CDN打印结果:
  • 未使用CDN关于IP字段

0x03 PHP获取网站使用CDN加速下用户真实的IP地址代码

我们可以通过判断$_SERVER数组变量中是否含有“HTTP_X_FORWARDED_FOR”元素来判断,网站是否使用CDN加速,如果使用了CDN加速并反回用户的真实IP,如果没实用就返回 “REMOTE_ADDR” 元素的值

代码:

函数代码:

如果你想在PHP的文件中多次调用以上代码,我们把可以把它封装成一个函数,如下

函数调用方法:

0x04 结语

使用方法方法有很多

可以试试本站获取本机IP地址https://ipv4.jackwolf.net

留下一个答复

请输入你的评论!
请在这里输入你的名字