PHP é à quinta-feira – Endereço IPv4 ou IPv6?
De volta à rubrica “PHP é à quinta-feira“, esperamos que os utilizadores contribuam com sugestões e estamos abertos para receber os vossos artigos , para posteriormente publicação, sobre esta super linguagem de scripting “server-side”.
Pois bem, ontem em conversa com um amigo ele questionava-me como colocar no seu site, a indicação se o cliente estava aceder via IPv4 ou IPv6. Vamos ver como fazer um pequeno script php para esta questão.
Como já referimos em vários artigos, o IPv6 é a nova versão do protocolo IP, e foi desenvolvido para suceder à actual versão (o IPv4). O que motivou o desenvolvimento desta nova versão foi a aproximação da exaustão do espaço de endereçamento e a necessidade de resolver algumas das limitações do IPv4, nomeadamente no que toca a segurança e mobilidade, e simplificar algumas das funcionalidades do protocolo IPv4.
Exemplo de um endereço IPv4 e IPv6
Endereço IPv4: 192.168.10.1
Endereço IPv6: 2000:490:23d0:6700:f82d:b871:ecb8:fbce
Como podemos ver, um endereço IPv6 tem uma representação hexadecimal de blocos de 16 bits, separados por dois pontos ‘:’, por exemplo:
x:x:x:x:x:x:x:x onde os “x” são números hexadecimais
Script em PHP para indicar se o cliente está aceder ao site com um endereço IPv4 ou IPv6.
Considerando que pretendemos apenas saber se o cliente está a aceder via IPv4 ou IPv6, basta apenas verificar o endereço IP do cliente é separado por ponto ‘.’ (IPv4) ou por ‘:’ (IPv6). Coisa simples não é?
Para a produção do script precisamos de 2 funções essenciais:
- $_SERVER['REMOTE_ADDR']; - que me permite obter o endereço do cliente
- strstr - Encontra a primeira ocorrência de uma string (neste caso os dois pontos ‘:’
Script completo
<?php $ip=$_SERVER['REMOTE_ADDR']; if (strstr($ip, ":")) { echo "O seu endereço IPv6 é o: $ip"; } else { echo "O seu endereço IPv4 é o: $ip"; } ?> |
O script é relativamente simples e pode servir de base para serviços/páginas engraçadas. Lembram-se daqueles sites em que existia uma tartaruga que dançava quando o utilizador tinha um IPv6 (ver aqui)? Ou o bebé que chorava quando o IP do cliente ainda era IPv4? Através do script disponibilizado é simples fazer páginas desse tipo. Basta apenas incluir por exemplo um gif (ex. tartaruga parada) se o cliente tiver um endereço IPv4 ou um gif animado se o cliente tiver um endereço IPv6.
Ficamos à espera que nos mostrem as vossas ideia :). Boas programações! Alguém quer ajudar nesta rubrica?
Artigos relacionados
- IPv6 – a tua tartaruga dança?
- PHP é à quinta-feira – Arrays Associativos
- DirList 0.3.0 – Listagem Online de ficheiros via PHP
- PHP é à quinta-feira – 50 dicas sobre desempenho e segurança
- PHP é a quinta-feira – Ciclos While e for
- PHP é à quinta-feira – Previsão do tempo com PHP
- PHP é à quinta-feira – Um debug mais prático
- PHP é à quinta-feira – Definir cookies de forma mais prática
- PHP é à quinta-feira – Cortar texto em largura
Download: script_ipv4_v6
Este artigo tem mais de um ano
Mto bom … tks
Outra forma de calcular o tamanho.. já qe o número de digitos do ipv6 é fixo: 32
$ip=$_SERVER[‘REMOTE_ADDR’];
echo (strlen($ip)==32) ? “IPV6 = “.$ip : “IPV4 = “.$ip;
afinal é 39. esqueci-me de contar os ‘:’
muito bom.
sugestoes: podiam colocar tutorial sobre sessões, tratamento de excepções e programação orientada a objectos(muito importante hoje em dia). 😉
É mesmo.
OO, boas práticas e frameworks vai ser show!
Pplware Rulez!
boa iniciativa continuem…
Obrigado, ^_^’
Pedro, para quem faz copy paste, pode corrigir a linha do IPv6? O cifrão está do lado errado…
Kudos, continuem com estas excelentes iniciativas…
E falta o fim da “aspa” na mesma linha…
Vivam, realmente passou-se aqui algo no copy paste do script que produzi. Verifiquem se esta tudo ok. No entanto podem fazer download do script na parte final do artigo.
Por acaso não vão aplicar este script ao pplware.sapo.pt? :-))
Grato pelo trabalho e tempo dispensado na elaboração do tutorial, mas quero apenas alertar para o facto de que usar a função strpos tornaria o tempo de execução mais rápido e com menos gastos de memória.