🤔 Para Refletir :
"Saber a hora de parar é quase tão importante quanto saber a hora de começar"
- Ricky O Bardo

PHP - Retornar IPV4 ao invés de IPV6

Crixus

Marquês
Membro
Membro
Juntou-se
07 de Julho de 2015
Postagens
586
Bravecoins
4
Eu sempre usei $_SERVER['REMOTE_ADDR'] para obter o IP do usuário/visitante em alguns sistemas.

Porém comecei a usar um IP FIXO no trabalho, que é IPV4, mas quando vou ver o registro eu acessei com IPV6.
Isso eu comprovei entrando nesses sites tipo:
http://testeportas.com.br/testeporta.php
Retornam o IPV4 (estático):
18X.14X.XXX.XXX

Mas eu criando uma script PHP usando a váriavel GLOBAL $_SERVER['REMOTE_ADDR'] retorna o meu IPV6:
Código:
280X:XXX:XXXX:XXXX:XXXX:XXXX:XXXX:XX39

Mas em sites como fóruns e blogs os sistemas em PHP deles registram o IPV4, e analisei os códigos e mesmo assim não consegui entender o algoritimo que consegue passar o IPV6 ou outro método para IPV4.

Então acredito que seja possível somente com PHP, se alguém puder me ajudar.
 
https://gist.githubusercontent.com/cballou/2201933/raw/4c341b3790a48c2b7636df78bb02fda4aec02ed5/get-ip-address.php

Achei esse snippet pra obter o IP do usuário de forma confiável em PHP, o $_SERVER['REMOTE_ADDR'] nem sempre é o melhor jeito de pegar o endereço do cliente, talvez com essa função você obtenha um resultado melhor.

\o
 
Eu consegui descobrir a razão de alguns sites pegarem o IPV4 mesmo usando IPV6 ao mesmo tempo e a minha hospedagem não, as rotas usadas podem variar do servidor onde foi hospedado a script PHP, então não tem realmente como isso ser feito sem uso de serviço de terceiros.

Agora uma solução alternativa, vale lembrar que não vou postar o serviço de terceiros que usei de modo trapaceiro por que acredito que isso seja mal visto pela comunidade, e que também pode ser considerado um sistema mal feito.

Para poder solucionar eu usei este serviço para converter em JSON o IPV4:
Código:
http://<ipv4 ipv6 service>/json/widgetdata.php?callback=_jqjsp&_1518034744039=

Ele retorna uma JSON:
Código:
_jqjsp({"address":"XXX.XXX.XXX.XXX","proto":"ipv4","country_code":"BR","country":"Brazil"})

Mas não se pode usar xmlHTTPrequest para receber valores de um JSON de outra hospedagem, então através da URL dela eu alterei o termo da variavel callback de maneira que a gambiarra fazendo com que o PHP do serviço criasse uma variavel Javascript:
Código:
http://<ipv4 ipv6 service>/json/widgetdata.php?callback=dataipv4=

E chamando ele por HTML a variavel fica acessivel ao seu navegador como um objeto JSON:
Código:
var dataipv4=({"address":"177.79.14.145","proto":"ipv4","country_code":"BR","country":"Brazil"})

Então agora sim com xmlHTTPRequest bastou usar a variavel dataipv4.address para obter o IP e enviar por método GET pra um PHP que use o IP:
Código:
function showIpv(ip) {
     var xmlhttp = new XMLHttpRequest();
     xmlhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
            console.log()
         }
     };
     xmlhttp.open("GET", "write_ipv4.php?ip="+ip, true);
     xmlhttp.send();
}

O arquivo write_ipv4.php que fica na hospedagem:
Código:
<?php
if(isset($_GET['ip']) && !empty($_GET['ip'])){
   /* User a variavel global $_GET['ip'] da maneira que preferir 
      Por exemplo:
      echo $_GET['ip']
      retorna o IP no formato XXX.XXX.XXX.XXX
   */
}else{
   console.log('Acesso direto proibido');
}
?>
 
Voltar
Topo Inferior