简体   繁体   English

检索准确的外部IPV4地址PHP

[英]Retrieve Accurate External IPV4 Address PHP

I was watching a video on how to gather the real external IP address of the user in [YT: DewClarke ]'s video. 我正在观看有关如何在[YT: DewClarke ]的视频中收集用户的真实外部IP地址的视频。 His code worked perfectly on his website , but resulted with an IPV6 version on mine : 2701:0564:d210:5be4:5b0b:8630:4c99:a3be (randomized for privacy reasons). 他的代码在他的网站上运行良好 ,但是在我的 网站上 得到了IPV6版本2701:0564:d210:5be4:5b0b:8630:4c99:a3be (出于隐私原因而随机分配)。 How can I get the IPV4 like 216.3.128.12 (randomized for privacy reasons)? 如何获得IPV4,216.3.128.12 (出于隐私原因而随机化)?

<?php 
    function getUserIP(){
      $client  = @$_SERVER['HTTP_CLIENT_IP'];
      $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
      $remote  = $_SERVER['REMOTE_ADDR'];
      if(filter_var($client, FILTER_VALIDATE_IP)){
        $ip = $client;
      }elseif(filter_var($forward, FILTER_VALIDATE_IP)){
        $ip = $forward;
      }else{
        $ip = $remote;
      }
      return $ip;
    }
    $user_ip = getUserIP();
?>

I "echo" the data later down the line... 稍后我“回显”数据...

<div id="LoggedAs"><span><?php echo $user_ip;?></span></div>

Some useful information is that I use 000WebHost.com, run it through CloudFlare.com, it's written in PHP, and I force SSL on that page. 一些有用的信息是,我使用000WebHost.com,通过CloudFlare.com运行它,它是用PHP编写的,并且我在该页面上强制使用SSL。 DewClarke's source-code can be found here: DewClarke's Source Code DewClarke的源代码可以在这里找到: DewClarke的源代码

Your code seems fine. 您的代码似乎很好。 This seems like a Cloudflare setting. 这似乎是一个Cloudflare设置。 Go to Cloudflare -> (your domain) -> Network. 转到Cloudflare->(您的域)->网络。 Then set IPv6 Compatibility to OFF. 然后将IPv6兼容性设置为OFF。

It is recommended though that you keep this setting to ON because IPv6 is critical to the growth of worldwide connection of networks. 虽然建议您将此设置保持为ON,因为IPv6对网络的全球连接的增长至关重要。

You may also be interested to use this code instead for getting the IP address and country of the connecting user as provided by Cloudflare: 您可能也有兴趣使用以下代码来获取Cloudflare提供的连接用户的IP地址和国家/地区:

$_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
$_SERVER['REMOTE_COUNTRY'] = isset($_SERVER['HTTP_CF_IPCOUNTRY']) ? $_SERVER['HTTP_CF_IPCOUNTRY'] : 'Unknown';

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM