2016-12-01 6 views
2

Я смотрел видео о том, как собрать реальный внешний IP-адрес пользователя в [YT:DewClarke] s видео. Его код отлично работал на своем сайте, но привел с версии IPV6 на шахте: 2701: 0564: D210: 5be4: 5b0b: 8630: 4c99: a3be (рандомизированы по причинам конфиденциальности). Как я могу получить IPV4, как 216.3.128.12 (рандомизирован для неприкосновенности частной жизни)?Получить Точный Внешний адрес IPv4 PHP

<?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 "эхо" данные позже вниз по линии ...

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

Некоторая полезная информация, которую я использую 000webhost.com, запустить его через cloudflare.com, это написано в PHP, и я принудительно применяю SSL на этой странице. Исходный код DewClarke находится здесь: DewClarke's Source Code

+0

IPV6 это фактический IP –

+0

Я ищу для IPV4 , а не IPV6, но да, я знаю. –

+0

Я не думаю, что вы знаете, так как только небольшое количество IPV6-адресов может быть непосредственно сопоставлено с IPV4 –

ответ

1

Ваш код кажется прекрасным. Это похоже на настройку Cloudflare. Перейдите в Cloudflare -> (ваш домен) -> Сеть. Затем установите для параметра IPv6 Compatibility значение OFF.

Рекомендуется, чтобы этот параметр был включен, так как IPv6 имеет решающее значение для роста мирового соединения сетей.

Вы также можете быть заинтересованы, чтобы использовать этот код вместо этого для получения IP-адреса и страны соединительного пользователя, как это предусмотрено Cloudflare:

$_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';