看到一个好玩的, 就随手收藏一下, 本 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 https://qq52o.me/go/aHR0cHM6Ly9hcGkucXE1Mm8ubWUvaXAvP2NvZGU9anM=
请求方式: 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 的脚本.
演示一下
您的 IP 是: 106.123.60.226
来源: http://www.bubuko.com/infodetail-2666293.html