纯净得只剩下字的访问IP查询API

看到一个好玩的,就随手收藏一下,本 API 作用:获取用户真实 IP,而获取用户 IP 常见的坑有两个,开发支付的时候也需要获取用户的真实 IP:

  • 获取的是内网的 ip 地址。在 Nginx 作为反向代理层的架构中,转发请求到 PHP,Java 等应用容器上。结果 PHP 获取的是 Nginx 代理服务器的 ip,表现为一个内网的地址。PHP 获取 REMOTE_ADDR 就是这样一个情况(内网地址)。
  • 获取的是攻击者伪造的 ip 地址。攻击者可以随便伪造一个头部信息,随便填写一个 ip 放到头部发过来,php 获取到 HTTP_CLIENT_IP 就是这样一个情况。伪造的 ip,导致我们数据库存储是假的 ip,无从真实去判断攻击者的来源。比如批量注册帐号的注册 ip,登录的 ip 等。

操作如下:

将 PHP 代码保存为 index.php,然后上传到网站根目录下的 IP 文件夹(这个自己随机定义)

现在,浏览器访问 http://你的域名/ip/ 就可以看到你的 IP 了

PHP 代码如下:

<?php
  /**
  * 纯净得只剩下字的访问 IP 查询 API | 沈唁志
  * https://qq52o.me/1814.html
  */
    //文本输出编码
    Header('content-type:text/html;Charset=utf-8');
    //定义函数
    function getIP()
    {
        static $realip;
    	//定义常量
        if (isset($_SERVER)){
            if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
                $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
            } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
                $realip = $_SERVER["HTTP_CLIENT_IP"];
            } else {
                $realip = $_SERVER["REMOTE_ADDR"];
            }
        } else {
            if (getenv("HTTP_X_FORWARDED_FOR")){
                $realip = getenv("HTTP_X_FORWARDED_FOR");
            } else if (getenv("HTTP_CLIENT_IP")) {
                $realip = getenv("HTTP_CLIENT_IP");
            } else {
                $realip = getenv("REMOTE_ADDR");
            }
        }
        return $realip;
    }

    $bool = false;

    if ($_GET['code']==='js') {
        echo "function syip(){document.write(\"";
        echo "您的 IP 是:".getip();
        echo "\");}";
    	$bool = true;
       }

    if ($_GET['code']==='js-txt') {
        echo "function syiptxt(){document.write(\"";
        echo getip();
        echo "\");}";
    	$bool = true;
       }

    if (!$bool){   
        echo getip();
    }
?>

实例数据获取

  • 请求地址:https://api.qq52o.me/ip
  • 请求方式:GET
  • 请求参数:接口:code 参数:1. js(返回【您的 IP 是:XXX】)  2.js-txt(仅返回 IP)

使用方法

将下面这段代码放入页面内需要展示 IP 的位置即可

<script type="text/javascript" src="https://api.qq52o.me/ip/?code=js"></script>
<script>syip()</script>

该脚本实质为 document.write 的脚本。

演示一下

syip()

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:纯净得只剩下字的访问IP查询API

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏代码世界

Linux常用命令大全

31490
来自专栏Laoqi's Linux运维专列

Ansible常见模块与使用方法

55540
来自专栏Linux驱动

第3阶段——内核启动分析之make menuconfig内核配置(2)

目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到...

22850
来自专栏架构师小秘圈

数据库连接池极简教程

一,常规数据库连接 ? 常规数据库连接一般由以下六个步骤构成: 装载数据库驱动程序; 建立数据库连接; 创建数据库操作对象 访问数据库,执行sql语句; 处理返...

43140
来自专栏LanceToBigData

linux(十)配置ssh免密登录实现

知道ssh的朋友应该知道它是用来干什么的,如果你不知道什么是ssh远程登录的话,可以去看一下我的上一篇博客,关于linux的网络基础的知识。 备注:ssh是用于...

37590
来自专栏互扯程序

玩转linux 这些命令就够了

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

23120
来自专栏向治洪

android定义新的api解决一些低版本不能运行的问题

Android Call requires API level 11 (current min is 8)的解决方案 【错误描述】     在用Eclipse开...

19560
来自专栏有趣的django

linux基础

1.目录 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先...

49450
来自专栏分布式系统进阶

linux-4.14.11 添加自定义的系统调用

17120
来自专栏猿人谷

eclipse在Ubuntu 13.04下的安装过程及问题小记

一、eclipse安装过程 首先确保在安装eclipse之前已经安装好Java虚拟机 1. eclipse官网下载压缩包  下载地址:http://www.ec...

21760

扫码关注云+社区

领取腾讯云代金券