Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/06/2011, 11:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: IPV6 y IPV4 en campo INT

Cita:
El resultado generado por ejemplo para la IP6 es algo como el siguiente:
11111110101111001010010101110100001110000010101100 10001111000001101010100100100101000101100100100100 1110111111101001100110000010

Con 128 digitos....... Ahora la duda del millon: ¿Como guardo 128 digitos? Por que en ningun sitio se explica, hay quien dice que usando 2 campos bigint , y en ese mismo sitio pone que cada campo bigint tiene 64 caracteres de capacidad!! :S :S
Los campos bigint unsigned tienen 20 caracteres de capacidad (18.446.744.073.709.551.615 , http://www.desarrolloweb.com/articulos/1054.php), es decir, necesitarias 7 columnas de bigint donde en cada columna se guarden 20, y en la ultima 8.....

Perdón por la gracia...
¡Nada que ver!
En realidad en las bases de datos (MySQL en este caso), los números no existen como caracteres. Un BIGINT no usa 20 caracteres para almacenarse, usa 8 bytes, porque los números no se almacenan en caracteres sino como binarios.
Un BIGINT es un numero de 64 bits, por lo que si quieres guardar el valor binario de un IPV6 deberías usar 2 BIGINT nada más, uno para cada segmento de 64 bits, transformado en entero sin signo.
¿Se entiende la idea?
Si bien no existe una implementación actual que te genere el número desde una dirección IPV6, si existe para IPV4 (NTOA() y su inversa ATON()). Se estima que cuando se difunda completamente el IPV6 se habrá implementado para esta última.
Como sea, la cosa puede ser mucho más fácil de lo que piensas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)